我一直在努力解决这个问题5天。可不是闹着玩的。请帮忙!这是我遇到的问题。
我所知道的:
我将var addressDict = Dictionary<Int, Array<String>>()
声明为全局变量。现在,我了解下面的代码用于附加存储在addressDict中的数据并更改类型,以便将数据存储到NSUserDefaults中。
let data = NSKeyedArchiver.archivedDataWithRootObject(addressDict) //archiving
self.defaults.setObject(data, forKey: "addressDict") //storing
if let data2 = self.defaults.objectForKey("addressDict") as? NSData {
let addressDict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data2)
}
现在,每次运行应用时,addressDict2
中存储的数据都会被addressDict
覆盖,因为当应用启动时,addressDict
中没有数据。因此,即使我可能已将某些数据附加到addressDict2
,但它会被addressDict
覆盖而没有数据。
因此,为了解决这个问题,我可以运行上面的代码但没有行self.defaults.setObject(data, forKey: "addressDict")
,现在,addressDict2
不再被不包含数据的变量覆盖{ {1}}。所以我追加的数据存储在addressDict
中。但是,如果我执行此操作,则无法再向addressDict2
添加新信息,因为我不再拥有addressDict2
。我希望你能在这里看到我的困境......
我想知道的事情:
这就是我想要的代码。我希望能够将新信息附加到某个变量中,比如self.defaults.setObject(data, forKey: "addressDict")
。当应用启动时,我希望将addressDict2
中的数据复制到addressDict2
。因此,这将导致addressDict
保存我希望它保留的数据。
我尝试过的内容:
为了试图解释我的意思,这里有一些代码。请注意,此代码不起作用,它只是为了澄清我的意思并显示以下代码是否有效,它会解决我的问题,我想(请如果我错了,请纠正我。所以在我的addressDict
中,我会类似以下内容:
viewDidLoad()
现在,当我运行此代码时:
override func viewDidLoad() {
super.viewDidLoad()
if NSUserDefaults.standardUserDefaults().objectForKey("addressDict") != nil {
if let data2 = defaults.objectForKey("addressDict") as? NSData {
addressDict = NSKeyedUnarchiver.unarchiveObjectWithData(data2) //there is an error here that states: "Cannot assign a value of type AnyObject? to a value of type Dictionary<Int, Array<Strings>>
}
}
}
let data = NSKeyedArchiver.archivedDataWithRootObject(addressDict) //archiving
self.defaults.setObject(data, forKey: "addressDict") //storing
if let data2 = self.defaults.objectForKey("addressDict") as? NSData {
let addressDict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data2)
}
此处将不再为空,并且不会使用空数据覆盖addressDict
。我将能够将addressDict2
与所有永久存储的数据一起使用!生活将是美好的。但我不知道该怎么做。
P.S。我对这个问题的长度深表歉意。谢谢你的时间!
答案 0 :(得分:1)
:
let foundationDictionary = NSMutableDictionary(dictionary: StoreDictionary) let dict = NSKeyedArchiver.archivedDataWithRootObject(foundationDictionary) NSUserDefaults.standardUserDefaults().setObject(dict, forKey: "yourkey")
使用保存的数据时:
if NSUserDefaults.standardUserDefaults().objectForKey("UserDetails")!=nil {
let dict : NSData = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as! NSData dictionaryName = NSKeyedUnarchiver.unarchiveObjectWithData(dict) as? NSDictionary
}