我有一个命名的属性myName
在我的课,如:
@property (nonatomic, strong) NSString *myName;
我需要的时候发送通知myName
属性的值被改变。
现在我做这样的事情:
- (void)setMyName:(NSString *)name
{
_myName = name;
[[NSNotificationCenter defaultCenter] postNotificationName:CHANGE_NOTIFICATION object:nil];
}
我知道有类似键-值观察 iOS中。 但我不知道如何实现它,我阅读整个文档,但无法得到很好的理解。
请帮助我了解如何实现同样没有使用定制的setter。
试试这个:
MyClass *var = [MyClass new];
[var addObserver:self forKeyPath:@"myName" options:NSKeyValueChangeOldKey context:nil];
并实施
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
}
这个方法会被随时叫MYNAME属性更改时
在- (void)setMyName:(NSString *)name
改为这样做
[self willChangeValueForKey:@"myName"];
_myName = name;
[self didChangeValueForKey:@"myName"];
//this generates the KVO's
而且,你要听(在的viewController),在viewDidLoad中有加入这一行:
[瓦特的addObserver:自forKeyPath:@ “MYNAME” 选项:NSKeyValueObservingOptionNew上下文:无];
//通过这样做,你注册的viewController收听KVO。
并且还实现此方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([[change objectForKey:NSKeyValueChangeNewKey] isEqual:[NSNull null]]) {
return;
} else {
//read the change dictionary, and have fun :)
}
}
//调用此方法,每当属性的值被改变。
要做到这一点,而不客户制定者,只是合成的属性设置。 这将创建所有支持调用willChangeValueForKey / didChangeValueForKey。
@synthesize myName;
然后设置与点语法属性值:
self.myName = @ “伊尼戈蒙托亚”
那么观察员将自动接收志愿通知。
(你需要释放你的观察对象之前删除的观察者。)