
我有一个’绑定控制器’注册一个对象上的一些键上的KVO通知(使用addobserver:forKeyPath:options:context :),我收到通知。但是,我收到两个通知,每次更改。我有一个解决方法的想法,但我宁愿解决为什么这是发生和纠正它!
有没有人有什么想法为什么会发生这种情况?我确定我一次只注册了每个通知,并且注销一次会导致两个通知停止。
谢谢。
编辑:
我有一个代码的请求,所以我会放一些。目前有点粗糙,它本质上仍然是一个概念的证明,所以忍受我。
这是我观察的属性之一(我知道这有点奇怪,但是这个类基本上暴露了一个NSManagedobject的属性作为自身的属性):
- (voID)setname:(Nsstring *)name{ [self willChangeValueForKey:@"name"]; [contact setFirstname:name]; [self dIDChangeValueForKey:@"name"];} 这是我用来观察该属性的代码(确认只运行一次,只在一个地方):
[viewmodel addobserver:self forKeyPath:@"name" options:(NSkeyvalueObservingOptionNew | NSkeyvalueObservingOptionInitial) context:vIEwController];
任何更改该属性的电话,例如:
viewmodel.name = @"Joe";[viewmodel setname: @"Joe"];[viewmodel setValue: @"Joe" forKey: @"name"];
将导致方法:
- (voID)observeValueForKeyPath:(Nsstring *)keyPath ofObject:(ID)object change:(NSDictionary *)change context:(voID *)context
被称为两次,每次都有相同的论据。
解决方法 你这样做:- (voID)setname:(Nsstring *)name{ [self willChangeValueForKey:@"name"]; [contact setFirstname:name]; [self dIDChangeValueForKey:@"name"];} 但是(由它的声音)从非NSManagedobject子类。这意味着Cocoa将会为您自动发送KVO通知。你也是通过发送你自己的补充。解决方案:
> OverrIDe automaticallyNotifIEsObserversForKey:返回NO
>将您的方法更改为:
– (voID)setname:(Nsstring *)name{ [contact setFirstname:name];}
总结以上是内存溢出为你收集整理的objective-c – 接收单个KVC变更的2 KVO通知全部内容,希望文章能够帮你解决objective-c – 接收单个KVC变更的2 KVO通知所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)