Swift-macOS程序在将字典保存到NSUserDefaults时卡住

Swift-macOS程序在将字典保存到NSUserDefaults时卡住,swift,macos,nsuserdefaults,Swift,Macos,Nsuserdefaults,我一直在尝试将[Int:String]类型的字典保存到NSUserDefaults中,它过去工作得很好,但最近就不行了。当调用saving方法时,macOS程序会被卡住(使用rainbow加载程序),并且永远不会恢复 由于我以前能够做到这一点,我怀疑这可能与NSUserDefaults在我的mac上的存储位置有关(我不知道它在哪里) 这是我的密码: let defaults = NSUserDefaults.standardUserDefaults() var dict: [In

我一直在尝试将[Int:String]类型的字典保存到NSUserDefaults中,它过去工作得很好,但最近就不行了。当调用saving方法时,macOS程序会被卡住(使用rainbow加载程序),并且永远不会恢复

由于我以前能够做到这一点,我怀疑这可能与NSUserDefaults在我的mac上的存储位置有关(我不知道它在哪里)

这是我的密码:

    let defaults = NSUserDefaults.standardUserDefaults()
    var dict: [Int: String] = [:]
    dict[1] = "123512"
    dict[2] = "1231232"
    dict[3] = "112512"
    dict[4] = "1212081"
    print(dict)
    defaults.setObject(dict, forKey: "cameraOrder")
目前,objectForKey:“cameraOrder”为空,我通过在终端上调用“defaults delete[Bundle ID]”实现了这一点

提前感谢你的帮助

其他信息

我认为这个问题可能与保存字典类型有关。如果我运行此代码:

    defaults.setObject("12", forKey: "cameraOrder")
    print(defaults.objectForKey("cameraOrder"))
它工作得很好


令人惊讶的是,即使我保存了[String:String]类型的字典,它也可以工作(将键1更改为“1”)

尝试从
NSUserDefaults
中正确获取字典

let userDefaults = NSUserDefaults.standardUserDefaults()

if let dictionaryForUserDefaults = userDefaults.dictionaryForKey("cameraOrder") as? [Int: String] {

}
今天我调查这个问题。试着用真正的Xcode而不是操场来测试

当您运行Xcode中的代码时,您将收到

尝试设置非属性列表对象{ 2 = 123512; 3 = 123512; 1 = 123512; 4=123512;}作为密钥cameraOrder的NSUserDefaults/cf首选项值

可以得出结论,Dictionary不是
非属性列表对象
。让我们仔细阅读苹果文档:

尽管NSDictionary和CFDictionary对象允许它们的键 可以是任何类型的对象,如果键不是字符串对象,则 集合不是属性列表对象

所以你的例子中的键是Int,这是一个问题

要解决此问题,请尝试:

let defaults = NSUserDefaults.standardUserDefaults()

let key = "cameraOrder"

var dict: [String: String] = [:]
dict["1"] = "123512"
dict["2"] = "1231232"
dict["3"] = "112512"
dict["4"] = "1212081"

print(dict)

defaults.setObject(dict, forKey: key)

如何从nsUserDefaultsDefaultsDefaults.objectForKey(“cameraOrder”)获取词典,但我的问题不在于获取,因为保存会使程序永久卡住。@EricAya如果答案正确,请看一看答案。我尝试获取(作为对象和词典),但它返回零。问题是如何毫无疑问地保存。谢谢Oleg,这正是我最终要做的,但是你的详细记录的答案帮助很大。如果你发现它对未来的其他人有帮助,请考虑我的问题。