Использование KVO с пользовательскими UITableViewCell и CoreData

Я прочитал тонны документации и руководств по KVO, но не нашел ничего, что я смог бы абстрагировать для своего приложения. У меня есть табличное представление, которое использует пользовательский класс UITableViewCell для предоставления интерфейса для включения/выключения параметров. В ячейке есть UISwitch, который я хотел бы «привязать» к логическим свойствам моей модели. Мне бы хотелось, чтобы при отображении ячейки она устанавливала свойство on элемента управления соответствующим образом для управляемого объекта, и когда я переворачиваю этот переключатель, объект модели обновляется до нового значения.

Я начал работать над этим, но первый шаг того, что я считал уместным, не работает.

[switchControl  addObserver:self
    forKeyPath:@"on"
    options:0
    context:NULL];

- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context
{
    NSLog(@"value changed");
}

person E-Madd    schedule 24.06.2010    source источник


Ответы (2)


Попробуй это:

[switchControl  addObserver:self
    forKeyPath:@"on"
    options:NSKeyValueObservingOptionNew
    context:NULL];
person jamapag    schedule 23.07.2010
comment
Как правило, хорошей идеей является не только передача в контексте, но и проверка в этом контексте, чтобы убедиться, что проходящее событие сгенерировано вашим наблюдением. - person Marcus S. Zarra; 23.07.2010
comment
это не сработало для меня. У меня такая же установка, как у парня, задающего вопрос. У меня есть UITableViewCell с UISwitch, о котором я хотел бы получать уведомления при переключении переключателя. Помочь кому-нибудь? - person Jay Q.; 25.08.2011

Вместо addObserver вы можете использовать addTarget, как показано ниже:

[switchControl addTarget:self action:@selector(photoSwitchChanged:)forControlEvents:UIControlEventValueChanged];

где целевая функция определяется следующим образом:

- (void)photoSwitchChanged:(UISwitch*)switch {
}
person Zbyszek Swirski    schedule 31.07.2012