0

我有一个 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 并注意到对象的变化,但有时它不会。我想知道我是否处理不正确?

4

2 回答 2

1

尝试添加:

[[NSUserDefaults standardUserDefaults] synchronize]

applicationDidBecomeActive:任何事情之前刷新用户默认的状态。应用程序会定期synchronize调用您的方法,但您可以手动刷新它。

于 2014-02-03T12:38:17.793 回答
0

你想什么时候处理你的reset_achievements_preference选择?该方法applicationDidBecomeActive在应用程序启动和应用程序从后台返回(由用户带到前台)时调用。

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

您可以简单地将这段代码移动到application:didFinishLaunchingWithOptions:方法来解决这个问题。

于 2014-02-03T11:37:08.767 回答