2016-09-07 53 views
2

我一直在试图将一个类型为[Int:String]的字典保存到NSUserDefaults中,它曾经很好,但最近不会。当调用保存方法并且从不恢复时,macOS程序卡住(使用彩虹加载程序)。Swift - macOS程序在将字典保存到NSUserDefaults时被卡住

因为我之前可以做到这一点,我怀疑这可能与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” 是空的,我做到了通过调用 “默认删除[包ID]” 在终端上。

在此先感谢您的帮助。

附加信息

我认为这可能问题可能有一些做的一个字典类型的保存。如果我运行这个代码:

defaults.setObject("12", forKey: "cameraOrder") 
    print(defaults.objectForKey("cameraOrder")) 

它完美的工作。

出人意料的是,即使我保存类型的词典[字符串:字符串]它的工作原理(更改密钥1为“1”)

+0

你如何获取从您选择NSUserDefaults的 –

+0

defaults.objectForKey(“cameraOrder”)词典,但我的问题是不取,因为只是储蓄使得程序永远卡住。 –

+0

@EricAya请你看看答案是否正确。 –

回答

2

尝试正确获取来自NSUserDefaults字典。

let userDefaults = NSUserDefaults.standardUserDefaults() 

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

} 

今天我调查了这个问题。尝试用真正的Xcode进行测试,不要与操场一起测试

当你运行你的代码在Xcode你会收到。

尝试设置非属性列表对象{ 2 = 123512; 3 = 123512; 1 = 123512; 4 = 123512; }作为关键相机的NSUserDefaults/CFPreferences值OrderOrder

有可能得出结论:Dictionary不是non-property-list object。并让苹果文档仔细阅读:

虽然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) 
+0

我试图抓取(作为对象和字典),但它返回nil。问题在于毫无疑问的保存。 –

+0

谢谢奥列格,这正是我最终做的,但是你的记录良好的答案有很多帮助。如果您发现未来可能对其他人有帮助,请考虑加强我的问题。 –