簡體   English   中英

在NSUserDefaults錯誤中存儲Int和Array的字典

[英]Storing a dictionary of Int and Array in NSUserDefaults error

到目前為止,我對該主題的了解:

我了解您只能將某些數據類型存儲到NSUserDefaults中:

NSUserDefaults類提供了方便的方法來訪問常見類型,例如floatsdoublesintegersBooleansURLs 默認對象必須是屬性列表,即NSData,NSString,NSNumber,NSNumber,NSDate,NSArray或NSDictionary的一個實例(或用於集合的實例的組合)。 如果要存儲任何其他類型的對象,通常應將其歸檔以創建NSData實例。

我知道我可以執行以下操作:

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

這是允許的,因為它將我的城市String數組強制轉換為NSArray,並且NSUserDefaults接受此數據類型。 但是,我有一個Int和Array的字典,即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>>東西。

要將字典存儲在NSUserDefaults您需要NSUserDefaults其轉換為NSData NSKeyedArchiverNSKeyedUnarchiver非常適合此工作。 以下示例顯示如何將字典存儲在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)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM