Например, у меня есть класс DataModel. На этом этапе я добавляю наблюдателя для моей собственности str . Для объекта я пришлю свой контроллер вида.
.h
#import <Foundation/Foundation.h>
@interface DataModel : NSObject
@property (strong, nonatomic) NSString *str;
- (void)setUpObserver:(id)object;
@end
.m
#import "DataModel.h"
@implementation DataModel
@synthesize str;
- (void)setUpObserver:(id)object
{
[self addObserver:object forKeyPath: @"str" options: NSKeyValueObservingOptionNew context: nil];
}
@end
На мой взгляд контроллер
#import "DataModel.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
dm = [[DataModel alloc] init];
[dm setUpObserver:self];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
if (object == dm && [keyPath isEqualToString: @"str"])
{
NSLog(@"it's work");
}
}
- (IBAction)changeValue:(id)sender {
dm.str = @"test change value";
}
@end
Это моя реализация КВО. Спасибо JeremyP за объяснение.