2014-10-27 2 views
0

Я объявил @property (strong, nonatomic) NSString *data; в файле h и передал NSString из другого класса в «данные». Я хочу определить, обновляется ли «данные», поэтому я попробовал код ниже, но он не работает.Как сделать способ обнаружения изменения переменной?

-(void)didChangeValueForKey:(NSString *)key { 

    [super didChangeValueForKey:key]; 
    if ([key isEqualToString:@"data"]) { 
     // do something  
    } 
} 

Кто-нибудь знает, как это понять?

Спасибо и извините за мой английский.

+0

http://google.com/search?q=cocoa+key+value+observation+guide –

+2

Если вы хотите обнаружить изменения только внутри класса, объявляющего свойство, вы можете создать собственный настраиваемый – Paulw11

ответ

3

Способ использования Наблюдение за ключевыми значениями.

Скажем у вас есть объект myObject со свойством data, то вы можете сделать что-то вроде этого ...

[self.myObject addObserver:self forKeyPath:@"data" options:NSKeyValueObservingOptionNew context:nil]; 

Тогда у вас есть метод ...

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    // if you observer multiple properties then they will all fire this method 
    // so you need to determine that the right property is being observed 

    if (object == self.myObject 
     && [keyPath isEqualToString:@"data"]) { 
     // if you are here then you know the object that changed is myObject 
     // and the property is the data property. 

     id theNewData = change[NSKeyValueChangeNewKey]; 
     // this is the new state of the data 
     // you can also get the old state by using different options when adding the observer. 
    } 
} 

Вы можете прочитать больше об этом in the Apple documentation about KVO

0

Используйте ключевое значение для кодирования - это очень много использовать в обновлении пользовательского интерфейса. Используйте это значение link

Смежные вопросы