2015-08-28 59 views
0

我所知道的,到目前爲止的回答:存儲詮釋的NSUserDefaults的錯誤的字典和數組

據我所知,只有你可以存儲到NSUserDefaults的某些數據類型:

NSUserDefaults類提供訪問常見類型的便捷方法,例如floats,doubles,integers,BooleansURLs。一個默認對象必須是一個屬性列表,也就是一個實例(或集合的實例組合):NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。如果你想存儲任何其他類型的對象,你通常應該將其存檔以創建一個NSData實例。

而且我知道我能做到以下幾點:

var cities = [String]() 
cities = NSUserDefaults.standardUserDefaults().objectForKey("cities") as! NSArray 

這是允許的,因爲它蒙上我的城市String數組到一個NSArray和接受NSUserDefaults的這種數據類型。但是,我有一個Int和一個數組的字典,即var addressDict = Dictionary<Int, Array<String>>()。我知道NSUserDefaults接受NSDictionary,NSInteger和NSArray。

我想知道什麼該怎麼做:

我想投我addressDict適當使接受NSUserDefaults的我addressDict。雖然,我知道Dictionary,Array和Int可以作爲獨立的實體轉換成NS的對應實體,但我不知道如何完全做到這一點,因爲數據類型爲Dictionary<Int, Array<String>>()。任何幫助?例如,我知道這是完全錯誤的,但像NSDictionary<NSInteger, NSArray<String>>什麼的。

+1

你不能存儲帶有'NSNumber'或'Int'作爲鍵的字典 –

回答

2

要在NSUserDefaults中存儲字典,您需要先將它們轉換爲NSDataNSKeyedArchiverNSKeyedUnarchiver是完美的工作。以下示例顯示如何將您的字典存儲在NSUserDefaults中並將其讀回。

var addressDict = Dictionary<Int, Array<String>>() 
    addressDict[3] = ["string1", "string2"] //some example values 
    let data = NSKeyedArchiver.archivedDataWithRootObject(addressDict) //archiving 
    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setObject(data, forKey: "address") //storing 
    if let data2 = defaults.objectForKey("address") as? NSData { //reading 
     let addressDict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data2) //unarchiving 
     print(addressDict2) 
    } 
+0

非常感謝你的回覆Adam! – Jae

+0

有一個問題:我認爲你提供的代碼就像NSUserDefaults的「設置」一樣。我將如何繼續關於實際將數據放入我的字典? – Jae

+0

這行創建示例數據:'addressDict [3] = [「string1」,「string2」]'。 – Adam