Параметр, переключаемый в 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: метод для решения этой проблемы.