在SettingsDapp中切换的选项并不总是在applicationDidBecomeActive中检测到

时间:2014-02-03 11:21:47

标签: ios iphone objective-c settings root.plist

我有一个Root.plist文件,用于我的应用程序设置。它有一个标识符为reset_achievements_preference的切换开关。在applicationDidBecomeActive方法中,我有以下代码:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSLog(@"reset achievements: %i", [[NSUserDefaults standardUserDefaults] boolForKey:@"reset_achievements_preference"]);

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"reset_achievements_preference"]) {
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"reset_achievements_preference"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        //Code to react to this change
    }
}

有时它会击中NSLog并注意到对象的变化,但有时却没有。我想知道我是不是错误地处理了这个问题?

2 个答案:

答案 0 :(得分:1)

尝试添加:

[[NSUserDefaults standardUserDefaults] synchronize]

要先复制applicationDidBecomeActive:以刷新用户默认值的状态。应用程序会定期调用您的synchronize方法,但您可以手动刷新它。

答案 1 :(得分:0)

您希望何时处理reset_achievements_preference选项?当应用程序启动时以及应用程序从后台返回时(用户将其置于前台),将调用方法applicationDidBecomeActive

如果您只想在应用程序启动时处理reset_achievements_preference,则用户可能会将您的应用程序置于后台,然后返回到该应用程序。在这种情况下,调用applicationDidBecomeActive并将reset_achievements_preference设置为NO,这可能不是您想要的。

您只需将此代码移至application:didFinishLaunchingWithOptions:方法即可解决此问题。