59

我正在使用以下代码使用 xcode 8 将对象保存到 UserDefaults(以前是 NSUserDefaults):

let defaults = UserDefaults.standard()
defaults.set(someObject, forKey: "someObject")
print(defaults.object(forKey: "someObject"))

someObject 是一本字典,我在模拟器上运行。

由于某种原因,这并没有保存值,而是打印了“nil”。想知道是不是模拟器问题。

4

5 回答 5

81

对于斯威夫特 3

UserDefaults.standard.setValue(token, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")
于 2016-08-12T20:44:31.260 回答
43

在这里完美地工作..!

    let dict:[String:String] = ["key":"Hello"]
    UserDefaults.standard.set(dict, forKey: "dict")
    let result = UserDefaults.standard.value(forKey: "dict")
    print(result!)
    // Output -> { key:hello;}
于 2016-06-15T18:30:59.917 回答
14

这是未记录但已知的问题,如果之前运行了 iOS 8/9 模拟器,则 NSUserDefaults/UserDefualts 在 iOS 10 模拟器中不起作用。

重新启动您的 Mac 并直接进入 XCode 8,iOS 10 模拟器将解决此问题。

另请参阅:为什么我的应用程序无法在 XCode 8 beta (8S128d) 中运行

于 2016-06-15T18:40:39.180 回答
10

这个问题似乎是由安装了两个版本的 xcode/simulator 引起的。

对我有用的是卸载 xcode 7 并在我的系统上保留 xcode 8 beta。清空垃圾,重置模拟器并运行。我也重新启动了我的电脑。

执行这些步骤后,模拟器可以保存到 UserDefaults。

于 2016-06-15T15:27:28.777 回答
7

斯威夫特 4:-

let defaults = UserDefaults.standard

let dictionary: [String:String] = ["key":"Value"]  //Dictionary which you want to save

defaults.setValue(dictionary, forKey: "DictValue") //Saved the Dictionary in user default

let dictValue = defaults.value(forKey: "DictValue") //Retrieving the value from user default 

print(dictValue)  // Printing the value 
于 2018-07-30T14:08:50.407 回答