使用 userDefaults 时意外发现 nil

Posted

技术标签:

【中文标题】使用 userDefaults 时意外发现 nil【英文标题】:unexpectedly found nil when use userDefaults 【发布时间】:2014-12-09 15:01:19 【问题描述】:

我为按钮添加@IBAction:

  @IBAction func addThemeAction(sender: AnyObject) 

        var userDefaults:NSUserDefaults=NSUserDefaults.standardUserDefaults()
        var itemList:NSMutableArray!=userDefaults.objectForKey("itemList") as NSMutableArray

当我按下按钮时出现致命错误:在展开可选值时意外发现 nil。

【问题讨论】:

【参考方案1】:

您的NSUserDefaults 中的键itemList 没有对象。不要用 ! 强制解包,而是检查 optional 是否为 nil 并有条件地解包:

let userDefaults = NSUserDefaults.standardUserDefaults()

var itemList = userDefaults.objectForKey("itemList") as? [AnyObject]

if let itemList = itemList 
    // itemList is not nil, use it here
 else 
    // itemList has never been set, perhaps use some default

另外,userDefaults 不必是 var

如果您知道类型,您可以将[AnyObject] 更改为其他内容(例如[String])。

【讨论】:

【参考方案2】:

One:您永远无法保证用户默认值中存在某些键,因此这是一个等待发生的崩溃。二:我不认为您从用户默认值中读取的字典是可变的。

【讨论】:

以上是关于使用 userDefaults 时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

HealthKit(打开可选时意外发现 nil)

value 不是 nil,而是在展开 Optional 值时意外发现 nil

使用 AVAudioPlayer 解包 Optional 值时意外发现 nil

使用委托:在展开可选值时意外发现 nil

在展开可选值时意外发现 nil

致命错误:使用 AVAudio 展开可选值时意外发现 nil