用户默认值在Swift 3.0中给出nil值

时间:2017-05-12 09:58:27

标签: ios swift nsmutablearray nsuserdefaults

我是swift的新手并试图将NSMutableArray存储在Userdefaults中。这就是我的意思:

//to save aaray in user defaults
var set:NSMutableArray = NSMutableArray(objects: self.listId)
  self.saveListIdArray(set)

func saveListIdArray(_ params: NSMutableArray = []) {
let defaults = UserDefaults.standard
defaults.set(params, forKey: "ArrayKey")
defaults.synchronize()

}

//to get array from user default
func getUserDefaultKeyForAllObject(key userDefaultsKey: String) -> NSMutableArray {
let array = UserDefaults.standard.object(forKey: NSUserDefaultsKey.LIST_ID_ARRAY) as! NSMutableArray
print(array)
return array

}

应用程序因"致命错误而崩溃:在展开可选值时意外发现nil"异常。

忽略我提出问题的方式,请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:1)

我有两个可能的原因:

  1. 您需要100%确定使用与保存相同的密钥检索阵列。在您的代码中,您使用" ArrayKey"保存数组。但是用NSUserDefaultsKey.LIST_ID_ARRAY检索它,你确定这是相同的字符串吗?
  2. self.listId的数据类型是什么?如果它是自定义类,那么您需要使该类符合nscoding协议,然后将其编码为Data并将其保存到userDefaults(Save custom objects into NSUserDefaults
  3. 第三个原因是你试图从默认值中获取一个对象而不用写任何东西。尝试更改

    let array = UserDefaults.standard.object(forKey: NSUserDefaultsKey.LIST_ID_ARRAY) as! NSMutableArray
    print(array)
    return array
    

    if let array = UserDefaults.standard.object(forKey: "ArrayKey") as? NSMutableArray {
       print(array)
       return array
    }
    else {
       return NSMutableArray()
    }