我在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.
}
}
有人知道吗?
答案 0 :(得分:3)
检查从textFeilds(storyboard文件)到Outlets(swift文件)的连接。因为缺少的连接将返回nil。
答案 1 :(得分:0)
这是一个很快的错误,当你告诉它某个变量中会有一个值,但没有一个。基本上,您从中读取数据的变量之一没有数据,因为由于某种原因它从未被分配过数据。
正如评论者最近所说,可能是这一行:(self.linefields as NSArray).valueForKey("text") as! NSArray
。我的建议是将as!
切换为as?
或as
,因为这不会告诉swift,&#34;这里肯定有价值。&#34;其他评论建议尝试用更简单的方法替换这个潜在的问题行,并在代码的其他地方更仔细地使用map()
函数。