NSUserDefaults.standardUserDefaults()。dictionaryForKey()返回编译错误

时间:2016-07-26 07:03:03

标签: ios swift nsuserdefaults

我想检查NSUserDefaults是否具有密钥为dic的值,然后加载数据并保存到loadedDic如果数据存在,或者设置loadedDic的值如果没有,请保存到NSUserDefaults

使用error!注释的语句会返回错误消息:

  

无法将[String : AnyObject]?类型的值指定给[String : [String]]

我认为这没关系,因为方法dictionaryForKey的返回类型表示AnyObject。仍然不完全理解这种AnyObject类型:(

任何人都可以向我解释是什么造成错误以及我应该如何解决这个问题?提前谢谢。

以下代码块位于viewDidLoad()类的UIViewController方法中。

var loadedDic = [String : [String]]()

let defaults = NSUserDefaults.standardUserDefaults()

if defaults.dictionaryForKey("dic") != nil {
  print("there's the value i want")
  loadedDic = defaults.dictionaryForKey("dic")//error!
}else {
  //some codes to set values of 'loadedDic'. this part works properly

  defaults.setObject(loadedDic, forKey: "dic")
  if defaults.synchronize(){
    print("saved")
  }
}

3 个答案:

答案 0 :(得分:1)

检查从NSUserDefaults收到的词典的类型是预期类型:

if defaults.dictionaryForKey("dic") != nil {
    print("there's the value i want")
    if let dic = defaults.dictionaryForKey("dic") as? [String : [String]]{
       loadedDic = dic
    }
}

答案 1 :(得分:0)

尝试

     var loadedDic = [String : AnyObject]()

而不是

  var loadedDic = [String : [String]]()

答案 2 :(得分:-1)

你必须这样做。

var loadedDic = Dictionary<String, AnyObject>()

现在,在从NSUserDefault

获取字典时
let defaults = NSUserDefaults.standardUserDefaults()

if let dic : Dictionary<String, AnyObject> = defaults.dictionaryForKey("dic") as! Dictionary<String, AnyObject>
{
    loadedDic = defaults.dictionaryForKey("dic")
}
else
{
    //some codes to set values of 'loadedDic'. this part works properly
    // Make sure you store it in Dictionary<String, AnyObject>() manner

    defaults.setObject(loadedDic, forKey: "dic")
    if defaults.synchronize(){
        print("saved")
    }
}