我使用 NSUserDefaults 保存我的词典,如下所示:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];
// unarchive
NSData *newData = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
NSDictionary *newDict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
问题:dicitionary包含一个带有其他值的名称值,但在特定时间段之后(大多数在24小时之后),名称值会给我" "(空白)值。
我第一次看到这种问题,帮我解决这个问题 谢谢。
答案 0 :(得分:1)
问题不在于这段代码。
1)尝试检查您的应用程序是否在其他类/方法中包含[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"]
。
2)在编写NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
时,检查 NSMutableArray *datas = [[[NSUserDefaults standardUserDefaults] objectForKey:@"datas"] mutableCopy];
if (!datas) {
datas = [NSMutableArray new];
}
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];
[datas addObject:data];
[[NSUserDefaults standardUserDefaults] setObject:datas forKey:@"datas"];
[[NSUserDefaults standardUserDefaults] synchronize];
// Debug code to see the result
NSLog(@"======= Logging saved datas");
for (NSData *data in datas) {
NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@", dict);
}
是否为空(可能它已损坏,并擦除已写入的数据)。
要检查问题,您可以进行小版本控制并调试问题,这是代码。
NSUserDefaults
此代码允许您查看{{1}}中保存的所有字典版本,并且您可能会得到保存空数据的时刻。
答案 1 :(得分:0)
我认为您将代码放在第一次保存并再次加载后再次调用的位置,然后您的nsdata对象为空。
情景:
第一次运行应用程序,它将保存首选项
完全关闭应用程序。然后再次打开应用程序,再次保存nsdata对象为空时的优先级
修改强>
为什么不直接在NSUserDefaults中保存字典?