NSUserdefaults在iOS应用程序中无法正常运行

时间:2014-04-08 14:29:46

标签: ios objective-c nsuserdefaults

我有一个应用程序,显示设置页面ONCE!这是从应用商店首次下载的时间。之后,它只进入主页面。

但是当您双击iPhone按钮并移除应用程序时滑动应用程序,然后它会返回到设置页面。

以下是我的应用中的一些代码

didfinishwithOptions

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"SettingsShown"])
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SettingsShown"];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"ShowBackButton"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"];

}



if ([[NSUserDefaults standardUserDefaults] boolForKey:@"SettingsShown"] == NO)
{
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"SettingsShown"];
}

然后我放了

- (void)applicationWillTerminate:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"SettingsShown"];
    NSLog(@"Application is terminated");
}

当您双击iPhone按钮时滑动应用程序时应该运行此操作。但它没有将用户默认设置为0,因为它再次从didfinishwithoptions运行设置页面。任何人都可以建议吗?

1 个答案:

答案 0 :(得分:3)

放入NSUserDefaults的任何值都不一定立即写入。例如,如果您的应用程序以某种不寻常的方式终止,则无法保证数据将被写入。

您可以使用synchronize:

强制系统写入NSUserDefaults
 [[NSUserDefaults standardUserDefaults] synchronize]

来自documentation

  

将对持久域的任何修改写入磁盘,并将所有未修改的持久域更新为磁盘上的内容。   因为此方法是定期自动调用的,所以只有在您无法等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容,请使用此方法你没有做任何改变。

这样做会有轻微的性能损失。