小编Jae*_*Jae的帖子

在NSUserDefaults中存储字典并使用存储的数据.

我一直在努力解决这个问题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)
}
Run Code Online (Sandbox Code Playgroud)

现在,每次运行应用程序时,存储的数据addressDict2都会被我覆盖,addressDict因为当应用程序启动时,没有数据存在addressDict.因此即使我可能已经添加了一些数据addressDict2,它也会被覆盖,addressDict因为它没有数据.

所以为了解决这个问题,我可以运行上面的代码,但没有行,self.defaults.setObject(data, forKey: "addressDict")现在,addressDict2不再被不包含数据的变量覆盖了addressDict.所以我追加的数据存储在addressDict2.但是,如果我这样做,我就不能再添加新信息,addressDict2因为我已经self.defaults.setObject(data, forKey: "addressDict")没有了.我希望你能在这里看到我的困境......

我想知道的:

这就是我希望我的代码要做的事情.我希望能够将新信息附加到某个变量中addressDict2.当应用程序启动时,我希望将addressDict2要复制的数据复制到其中addressDict.因此,这将导致addressDict保存我希望它保留的数据.

我尝试过的:

为了试图解释我的意思,这里有一些代码.请注意,这段代码不起作用,只是为了澄清我的意思,并表明以下代码是否有效,它会解决我的问题,我想(如果我错了请纠正我).所以在我viewDidLoad(),我会如下:

override func viewDidLoad() …
Run Code Online (Sandbox Code Playgroud)

nsdictionary nsuserdefaults ios swift

5
推荐指数
1
解决办法
220
查看次数

标签 统计

ios ×1

nsdictionary ×1

nsuserdefaults ×1

swift ×1