我有一個測試人員提交的錯誤,如果他執行一個操作,然後重新啓動他的手機(通過按住家和睡眠/喚醒按鈕幾秒鐘),該應用程序不是持久狀態。NSUserDefaults同步不保存在
我已經能夠重現此問題。 [NSUserDefaults同步] 是被調用,但是當我在重新啓動後重新啓動應用程序時,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.
請注意,輸出是「是,否,否」,但它應該是「是,否,是」
你使用哪個事件調用'[NSUserDefaults synchronize]' –
同步應該可以工作,可能有助於看到一些代碼。你如何設置和獲取數據? – wattson12
聽起來很奇怪,不應該發生。可以請你在你正在同步的地方發佈一些代碼。 – Shantanu