NSUserDefaults在特定时间后清除其值

时间:2014-10-22 06:58:17

标签: ios objective-c iphone nsuserdefaults

我使用 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小时之后),名称值会给我" "(空白)值。

我第一次看到这种问题,帮我解决这个问题 谢谢。

2 个答案:

答案 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中保存字典?