我正在为当前选择的UITabBar写一个索引到[NSUserDefaults standardUserDefaults]
,但我得到了一个奇怪的情况,即索引没有写入磁盘。我正在使用
// 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 :(得分:6)
你需要调用synchronize
,虽然它会定期自动调用(至少根据文档)。是时候在应用代表的applicationWillEnterBackground:
和applicationWillTerminate:
中调用它。
答案 1 :(得分:3)
是。您需要调用synchronize以确保实际写入您的更改。
[[NSUserDefaults standardUserDefaults] synchronize];
通常在applicationWillResignActive
处理程序中完成。
答案 2 :(得分:2)
以定期间隔自动调用synchronize方法。如果您不能等待定期间隔,也可以直接调用它。如果您的应用程序即将退出,Apple的文档提供了调用synchronize的示例。