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];
}
Другие вопросы по тегам