ios-致命错误:在展开可选值(lldb)时意外发现nil
我在Swift中使用UIViewController,但当我尝试持久化数据并尝试将其检索回应用程序时,我得到了它ios-致命错误:在展开可选值(lldb)时意外发现nil,ios,xcode,swift,uiviewcontroller,Ios,Xcode,Swift,Uiviewcontroller,我在Swift中使用UIViewController,但当我尝试持久化数据并尝试将其检索回应用程序时,我得到了它 import UIKit class ViewController: UIViewController { @IBOutlet var linefields:[UITextField]! func dataFilePath() -> String { let paths = NSSearchPathForDirectoriesInDomai
import UIKit
class ViewController: UIViewController {
@IBOutlet var linefields:[UITextField]!
func dataFilePath() -> String {
let paths = NSSearchPathForDirectoriesInDomains(
NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask, true)
let documetnDirectory = paths[0] as! NSString
return documetnDirectory.stringByAppendingPathComponent("data.plist") as String
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let filePath = self.dataFilePath()
if (NSFileManager.defaultManager().fileExistsAtPath(filePath)){
let array = NSArray(contentsOfFile: filePath) as! [String]
for (var i=0;i<array.count;i++){
linefields[i].text = array [i]
}
}
let app = UIApplication.sharedApplication()
NSNotificationCenter.defaultCenter().addObserver(self,selector: "applicationWillResignActive:",name:UIApplicationWillResignActiveNotification,
object: app)
}
func applicationWillResignActive(notification:NSNotification){
let filePath = self.dataFilePath()
let array = (self.linefields as NSArray).valueForKey("text") as! NSArray
//-----> Next line: fatal error: unexpectedly found nil while unwrapping an Optional value
array.writeToFile(filePath, atomically:true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
导入UIKit
类ViewController:UIViewController{
@IBOUTLE var行字段:[UITextField]!
func dataFilePath()->字符串{
让path=NSSearchPathForDirectoriesInDomains(
NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask,true)
将documetnDirectory=路径[0]设为!NSString
将documetnDirectory.stringByAppendingPathComponent(“data.plist”)作为字符串返回
}
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
让filePath=self.dataFilePath()
if(NSFileManager.defaultManager().fileExistsAtPath(filePath)){
将array=NSArray(contentsOfFile:filePath)设为![String]
对于(var i=0;i这是斯威夫特的错误,因为当你告诉它某个变量中有一个值,但没有一个值。基本上,你从中读取数据的一个变量没有数据,因为出于某种原因,它从未被分配数据
正如评论人士最近所说,可能是这一行:(self.linefields作为NSArray)。valueForKey(“text”)作为!NSArray
。我的建议是将As!
切换为As?
或As
,因为这不会告诉swift,“这里肯定有值。”其他评论建议尝试用更简单的方法来替代这一潜在的问题行,并在代码的其他地方更仔细地使用map()
函数。检查从TextFeild(故事板文件)到Outlets(swift文件)的连接。因为缺少连接将返回nil。这几乎肯定是Swift堆栈溢出报告的最常见异常。您尝试了什么调试?尝试设置异常断点以确定导致异常的行。欢迎使用StackOverflow!您能更具体地说明代码返回的行吗一个零以及你想要完成的。我猜是(self.linefields作为NSArray)。valueForKey(“text”)
正在返回nil
@originaluser2NSArray
上的valueForKey
方法返回一个新数组,该数组是从数组中所有对象上获取指定键的值得到的结果,因此尽管我同意这一行可能是问题所在,valueForKey(“text”)
valid@Paulw11啊,好吧,我不知道!知道起来很有趣。转换为as!转换为as?对我没有帮助。