繁体   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