Получение 2 уведомлений KVO для одного изменения KVC

Я использую KVC / KVO для создания настраиваемой реализации привязок для университетского проекта (она должна быть настраиваемой, поскольку я хочу делать что-то, выходящее за рамки того, что могут делать привязки, включая работу на iOS) .

У меня есть «контроллер привязок», который регистрирует уведомления KVO для ряда ключей объекта (с использованием addObserver: forKeyPath: options: context :), и я получаю уведомления. Однако я получаю два уведомления о каждом изменении. У меня есть идея обходного пути, но я бы предпочел выяснить , почему это происходит, и исправить это!

Есть ли у кого-нибудь идеи, почему это может происходить? Я' Я уверен, что я зарегистрировал каждое уведомление только один раз, и отмена регистрации один раз приводит к остановке обоих уведомлений.

Спасибо.

Изменить:

У меня есть запрос на код, поэтому я добавьте немного. На данный момент это немного грубо, по сути, это все еще доказательство концепции, так что несите меня.

Это одно из свойств, которые я наблюдаю (я знаю, что это немного странно, но этот класс, по сути, раскрывает некоторые свойства NSManagedObject как свойства самого себя):

- (void)setName:(NSString *)name
{
    [self willChangeValueForKey:@"name"];
    [contact setFirstName:name];
    [self didChangeValueForKey:@"name"];
}

Это код, который я использую для наблюдения за этим свойством (подтверждено, что он запускается только один раз и только в одном месте):

[viewModel addObserver:self
            forKeyPath:@"name"
               options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial)
               context:viewController];

Любые последующие вызовы, которые изменяют это свойство , например:

viewModel.name = @"Joe";
[viewModel setName: @"Joe"];
[viewModel setValue: @"Joe" forKey: @"name"];

вызовет метод:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

дважды, каждый раз с одними и теми же аргументами.

17
задан Mike Abdullah 15 December 2010 в 18:40
поделиться