Параметр, переключаемый в Settings.app, не всегда обнаруживается в applicationDidBecomeActive.

У меня есть файл 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 ответа

Решение

Попробуйте добавить:

[[NSUserDefaults standardUserDefaults] synchronize]

к applicationDidBecomeActive: прежде чем что-либо обновить состояние пользователя по умолчанию. твой synchronize метод периодически вызывается приложением, но вы можете обновить его вручную.

Когда вы хотите справиться с вашим reset_achievements_preference вариант? Метод applicationDidBecomeActive вызывается, когда приложение запускается и когда приложение возвращается из фона (выводится пользователем на передний план).

Если вы хотите справиться reset_achievements_preference только при запуске приложения пользователь может перевести приложение в фоновый режим и вернуться к нему. В этом случае applicationDidBecomeActive называется и устанавливает reset_achievements_preference НЕТ, что, вероятно, не то, что вы хотите.

Вы можете просто переместить этот код в приложение: didFinishLaunchingWithOptions: метод для решения этой проблемы.

Другие вопросы по тегам