2010-11-30 98 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