使用 NSFileManager 检索多个值时收到“致命错误:在展开可选值时意外发现 nil”
Posted
技术标签:
【中文标题】使用 NSFileManager 检索多个值时收到“致命错误:在展开可选值时意外发现 nil”【英文标题】:"fatal error: unexpectedly found nil while unwrapping an Optional value" received when using NSFileManager to retrieve multiple values 【发布时间】:2015-04-23 16:22:13 【问题描述】:当我尝试使用 NSFileManager 检索多个值时收到以下错误:fatal error: unexpectedly found nil while unwrapping an Optional value
这是我的代码:
class func loadGameData() -> (HighScore: Int, HasCompletedTutorial: Bool)
// getting path to GameData.plist
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
let documentsDirectory = paths[0] as! String
let path = documentsDirectory.stringByAppendingPathComponent("GameData.plist")
let fileManager = NSFileManager.defaultManager()
//check if file exists
if(!fileManager.fileExistsAtPath(path))
// If it doesn't, copy it from the default file in the Bundle
if let bundlePath = NSBundle.mainBundle().pathForResource("GameData", ofType: "plist")
let resultDictionary = NSMutableDictionary(contentsOfFile: bundlePath)
fileManager.copyItemAtPath(bundlePath, toPath: path, error: nil)
let resultDictionary = NSMutableDictionary(contentsOfFile: path)
var myDict = NSDictionary(contentsOfFile: path)
if let dict = myDict
//loading values - THIS IS WHERE THE ERROR OCCURS
let HighScore: AnyObject = dict.objectForKey("HighScore")!
let CompletedTutorial: AnyObject = dict.objectForKey("HasCompletedTutorial")!
return (Int(HighScore as! NSNumber), Bool(CompletedTutorial as! NSNumber))
return (0, false)
我自己测试了这两条线,它们运行良好。但他们似乎没有一起工作
这里是调用函数的代码
let val = GameData.loadGameData()
println(val.HighScore)
println(val.HasCompletedTutorial)
我已经测试了这个函数调用的多个变体,但没有任何区别
谢谢
【问题讨论】:
您在哪一行得到错误? 'paths' 是 nil 吗? @RehcsifMit 错误发生在这两行:let HighScore: AnyObject = dict.objectForKey("HighScore")! let CompletedTutorial: AnyObject = dict.objectForKey("HasCompletedTutorial")!
除非你的字典保证有这些键,否则你最好使用'?'解包并显式检查 nil。
【参考方案1】:
你为什么不打开它们呢?试试这样的
if let dict = myDict
if let
highScore = dict.objectForKey("HighScore"),
completedTutorial = dict.objectForKey("HasCompletedTutorial")
return (Int(highScore as! NSNumber), Bool(completedTutorial as! NSNumber))
【讨论】:
以上是关于使用 NSFileManager 检索多个值时收到“致命错误:在展开可选值时意外发现 nil”的主要内容,如果未能解决你的问题,请参考以下文章