2010-06-24 2 views
0

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

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

[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"); 
} 

ответ

1

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

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

Это как правило, хорошая идея не только проходить в контексте, bu t, чтобы проверить этот контекст, чтобы убедиться, что произошедшее событие генерируется вашим наблюдением. –

+0

это не сработало для меня. У меня такая же настройка, как и парень, задающий вопрос. У меня есть UITableViewCell, у которого есть UISwitch, который я хотел бы получать, когда переключатель переключается. Помогите кому-нибудь? –

0

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

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

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

- (void)photoSwitchChanged:(UISwitch*)switch { 
}