ios - 致命错误:在展开可选值(lldb)时意外发现nil

时间:2016-03-15 23:02:07

标签: ios xcode swift uiviewcontroller

我在Swift中使用了一个UIViewController,但是当我尝试保留数据并尝试将其检索回应用程序时,我得到了它。

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.
    }
}

有人知道吗?

enter image description here

2 个答案:

答案 0 :(得分:3)

检查从textFeilds(storyboard文件)到Outlets(swift文件)的连接。因为缺少的连接将返回nil。

答案 1 :(得分:0)

这是一个很快的错误,当你告诉它某个变量中会有一个值,但没有一个。基本上,您从中读取数据的变量之一没有数据,因为由于某种原因它从未被分配过数据。

正如评论者最近所说,可能是这一行:(self.linefields as NSArray).valueForKey("text") as! NSArray。我的建议是将as!切换为as?as,因为这不会告诉swift,&#34;这里肯定有价值。&#34;其他评论建议尝试用更简单的方法替换这个潜在的问题行,并在代码的其他地方更仔细地使用map()函数。