Подтвердить что ты не робот

Обнаружение изменений в NSUserDefaults

Я разрабатываю приложение iOS с последним SDK.

Я хочу знать, когда свойство на NSUserDefaults изменяет его значение.

Я нашел этот, но он специфичен для MAC:

[[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
    forKeyPath:[@"values." stringByAppendingString: @"MyPreference"]
    options:NSKeyValueObservingOptionNew
    context:NULL];

Как я могу сделать это на iOS?

4b9b3361

Ответ 1

попробуйте NSUserDefaultsDidChangeNotification с помощью этого фрагмента кода:

- (id)init {

  self = [super init];

  if(self) {
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(defaultsChanged:)
                                                  name:NSUserDefaultsDidChangeNotification
                                                object:nil];
  }
  return self;    
}

- (void)defaultsChanged:(NSNotification *)notification {
  // Get the user defaults
  NSUserDefaults *defaults = (NSUserDefaults *)[notification object];

  NSLog(@"%@", [defaults objectForKey:@"yourIntrestedObject"]);
}

- (void)dealloc {
 [[NSNotificationCenter defaultCenter] removeObserver:self];
}

Ответ 2

Использовать NSUserDefaultsDidChangeNotification для уведомления об изменении настроек пользователя по умолчанию:

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(defaultsDidChange:) name:NSUserDefaultsDidChangeNotification
    object:nil];

// notification
- (void)defaultsDidChange:(NSNotification *)aNotification
{
     //
}

Используйте KVO для уведомления об определенных изменениях в настройках пользователя по умолчанию:

[[NSUserDefaults standardUserDefaults] addObserver:self 
    forKeyPath:@"APXMyPropertyIamInterestedInKey" options:NSKeyValueObservingOptionNew
    context:NULL];

// KVO handler
-(void)observeValueForKeyPath:(NSString *)aKeyPath ofObject:(id)anObject
    change:(NSDictionary *)aChange context:(void *)aContext 
{
    // 
}

Ответ 3

Вот решение, которое я написал о том, как это сделать в Swift, а также получить userInfo, fooobar.com/questions/255632/...

Ответ 4

В справке Xcode обзор класса UserDefaults (экономное имя для NSUserDefaults) четко указывает:

Вы можете использовать наблюдение за ключевыми значениями для регистрации наблюдателей для конкретных интересующих ключей, чтобы получать уведомления обо всех обновлениях в локальной базе данных по умолчанию. Для получения дополнительной информации см. Руководство по программированию по наблюдению за ключевыми значениями.

Я посмотрю, могу ли я придумать быстрый образец кода, но переполнение стека должно быть заполнено образцами KVO в swift.