今天我遇到了一个相当混乱的问题:
当我的应用程序启动时,我会下载一些内容并在解析响应后将数据写入NSUserDefaults。 现在这个工作正常,直到我最近发现有时我的整个用户界面冻结,并且在我重新启动应用程序之前不会解冻。当我在调试器中点击暂停程序执行时,我得到:
文档说NSUserDefaults是线程安全的,从我看到的没有其他线程试图访问用户默认值...
非常感谢有关如何解决/进一步调试此问题的任何想法!
提前致谢!
造成问题的代码:
在收到webservice的响应后调用:
+ (void)updateWithData:(NSData *)data
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSError *error;
NSArray *decodedData;
if (data) {
decodedData = [NSPropertyListSerialization propertyListWithData:data
options:NSPropertyListImmutable
format:NULL
error:&error];
}
if (!error && decodedData) {
[userDefaults setObject:decodedData forKey:kUserDataUserDefaultsKey];
}
else{
NSLog(@"%@", error.localizedDescription);
}
}
答案 0 :(得分:0)
更新了新的代码示例:
您应该将decodingData转换为存档数据,以便将其存储在NSUserDefaults中:
if (!error && decodedData) {
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: decodedData]];
[userDefaults setObject: archivedData forKey:kUserDataUserDefaultsKey];
}
用这个检索数据:
NSArray *storedData = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:kUserDataUserDefaultsKey]];