我有一个测试人员提交的错误,如果他执行一个操作然后重新启动他的手机(通过按下主页和睡眠/唤醒按钮几秒钟)应用程序不是持久状态。
我已经能够重现这个问题。[NSUserDefaults synchronize]被调用,但是当我在重启后重启应用程序时,NSUserDefaults 中的值没有保存。
有谁知道是否将存储同步到稍后保存到磁盘的缓冲区?如果是这样,我如何刷新缓冲区(我认为同步与刷新相同,但显然不是。)
(编辑)换句话说:
assert([[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO);
[[NSUserDefaults standardUserDefaults] setBool: YES forKey: MY_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
调用上述方法后,将应用程序留在前台并重新启动设备,然后重新启动设备并重新运行应用程序。断言应该第二次触发,但有时不会。
具体来说...我创建了一个单视图应用程序并将以下代码放入 viewDidLoad
#define MY_KEY @"MY_KEY"
- (void)viewDidLoad
{
[super viewDidLoad];
BOOL key = [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY];
NSLog(@"[[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == %@", key ? @"YES" : @"NO");
[[NSUserDefaults standardUserDefaults] setBool: !key forKey: MY_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"reboot now.");
}
这是应用程序的三个运行的输出:
2013-05-31 12:17:44.127 syncTest[162:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == YES
2013-05-31 12:17:44.133 syncTest[162:907] reboot now.
2013-05-31 12:18:49.771 syncTest[128:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO
2013-05-31 12:18:49.778 syncTest[128:907] reboot now.
2013-05-31 12:19:41.388 syncTest[124:907] [[NSUserDefaults standardUserDefaults] boolForKey: MY_KEY] == NO
2013-05-31 12:19:41.397 syncTest[124:907] reboot now.
请注意,输出是“YES,NO,NO”,但应该是“YES,NO,YES”