2010-11-30 100 views
2

我正在爲當前選定的UITabBar編寫一個索引到[NSUserDefaults standardUserDefaults],但我遇到了索引未寫入磁盤的奇怪情況。我使用NSUserDefaults寫入磁盤?

// TO WRITE 
NSNumber *selectedTab = [NSNumber numberWithInt:[tabBarController selectedIndex]]; 
[[NSUserDefaults standardUserDefaults] setObject:selectedTab forKey:@"selectedTab"]; 

和...

// TO READ 
NSNumber *selectTab = [[NSUserDefaults standardUserDefaults] objectForKey:@"selectedTab"]; 
NSLog(@"SelectTab: %@", selectTab); 
[tabController setSelectedIndex:[selectTab intValue]]; 

誰能告訴我,如果不setObject:forKey:實際寫入到磁盤上,或者我需要強制使用類似synchronize寫?

+0

[首選項setInteger:42 forKey:@ 「integerKey」]; [prefs synchronize]; – Vjy 2010-11-30 16:38:49

回答

5

您需要致電synchronize,儘管它會定期自動調用(至少根據文檔)。一個好時機可以在應用程序代理的applicationWillEnterBackground:applicationWillTerminate:

3

是的。您需要調用同步以確保您的更改實際上已寫入。

[[NSUserDefaults standardUserDefaults] synchronize]; 

通常它在applicationWillResignActive處理程序中完成。

2

同步方法會定期自動調用。如果您不能等待週期性間隔,也可以直接調用它。如果您的應用程序即將退出,Apple的文檔給出了調用同步的示例。

參見:NSUserDefaults Class Reference