NSUserDefaults写入磁盘?

时间:2010-11-30 16:33:10

标签: iphone objective-c cocoa-touch

我正在为当前选择的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等强制写入?

3 个答案:

答案 0 :(得分:6)

你需要调用synchronize,虽然它会定期自动调用(至少根据文档)。是时候在应用代表的applicationWillEnterBackground:applicationWillTerminate:中调用它。

答案 1 :(得分:3)

是。您需要调用synchronize以确保实际写入您的更改。

[[NSUserDefaults standardUserDefaults] synchronize];

通常在applicationWillResignActive处理程序中完成。

答案 2 :(得分:2)

以定期间隔自动调用synchronize方法。如果您不能等待定期间隔,也可以直接调用它。如果您的应用程序即将退出,Apple的文档提供了调用synchronize的示例。

请参阅:NSUserDefaults Class Reference