objective-c – 接收单个KVC变更的2 KVO通知

objective-c – 接收单个KVC变更的2 KVO通知,第1张

概述我正在使用KVC / KVO为大学项目创建自定义绑定实现(需要自定义,因为我想做的事情超出绑定可以做的事情,包括在iOS上运行)。 我有一个’绑定控制器’注册一个对象上的一些键上的KVO通知(使用addObserver:forKeyPath:options:context :),我收到通知。但是,我收到两个通知,每次更改。我有一个解决方法的想法,但我宁愿解决为什么这是发生和纠正它! 有没有人有什么 我正在使用KVC / KVO为大学项目创建自定义绑定实现(需要自定义,因为我想做的事情超出绑定可以做的事情,包括在iOS上运行)。

我有一个’绑定控制器’注册一个对象上的一些键上的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通知所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1036596.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存