Settings.bundle: как приложение должно распознавать тот факт, что значение изменилось за пределами приложения?
Я использую комплект настроек для настройки своего приложения. Как побочный эффект, тот же набор настроек доступен вне приложения в настройках iOS. Это замечательно. Однако есть небольшая проблема - мне нужно реагировать на изменения. Например, у меня есть имя, которое пользователь использует для распознавания другими, и если оно меняется, должен произойти серверный вызов. Как справиться с этим?
РЕДАКТИРОВАТЬ: успокойся, ребята. Я никогда не делал этого раньше, и мне трудно прочитать все доступные рекомендации. Settings.bundle не является очевидной вещью, с которой нужно иметь дело. В любом случае, не стесняйтесь голосовать за вопрос, но, по крайней мере, найдите минутку и прочитайте все комментарии, прежде чем сделать это.
Попробовал пару предложенных способов, то есть использование уведомлений и более прямое манипулирование настройками по умолчанию, когда приложение становится активным. Второй подход работал лучше, потому что он выполнялся только в те моменты, которые я ожидаю, а не каждый раз, когда любой параметр конфигурации изменяется / добавляется / удаляется в приложении.
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSString *nameOld = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *nameNew = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];
1 ответ
Вы должны проверить изменения настроек в этом методе appDelegate.
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Check for any changes to settings
[[NSUserDefaults standardUserDefaults] synchronize];
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
bool userICloudChoice = [userDefaults boolForKey:_cloudPreferenceKey];
}