2016-09-07 73 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

謝謝奧列格,這正是我最終做的,但是你的記錄良好的答案有很多幫助。如果您發現未來可能對其他人有幫助,請考慮加強我的問題。 –