我有一个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并注意到对象的变化,但有时却没有。我想知道我是不是错误地处理了这个问题?
答案 0 :(得分:1)
尝试添加:
[[NSUserDefaults standardUserDefaults] synchronize]
要先复制applicationDidBecomeActive:
以刷新用户默认值的状态。应用程序会定期调用您的synchronize
方法,但您可以手动刷新它。
答案 1 :(得分:0)
您希望何时处理reset_achievements_preference
选项?当应用程序启动时以及应用程序从后台返回时(用户将其置于前台),将调用方法applicationDidBecomeActive
。
如果您只想在应用程序启动时处理reset_achievements_preference
,则用户可能会将您的应用程序置于后台,然后返回到该应用程序。在这种情况下,调用applicationDidBecomeActive
并将reset_achievements_preference
设置为NO,这可能不是您想要的。
您只需将此代码移至application:didFinishLaunchingWithOptions:方法即可解决此问题。