objective-c – 在多对多关系中观察依赖键

objective-c – 在多对多关系中观察依赖键,第1张

概述我有一个核心数据实体“bid”,它与许多“项目”有关系,称为“itemLink”. 在IB中,我有一个文本字段绑定到“总计”,这几乎可以工作. 在“bid.m”我有: - (NSDecimalNumber *)total{ return [self valueForKeyPath:@"itemLink.@sum.price"];} 我也有: + (NSSet *)keyPathsFor 我有一个核心数据实体“bID”,它与许多“项目”有关系,称为“itemlink”.

在IB中,我有一个文本字段绑定到“总计”,这几乎可以工作.

在“bID.m”我有:

- (NSDecimalNumber *)total{    return [self valueForKeyPath:@"itemlink.@sum.price"];}

我也有:

+ (NSSet *)keypathsForValuesAffectingTotal {     return [NSSet setWithObjects:@"itemlink",nil]; }

添加或删除项目时,“总计”会按预期更新.但是,如果您更改了itemlink集合中的“项目”,则总计不会刷新.如何让KVO查看链接的NSSet中的相关对象何时发生变化?

谢谢

解决方法 看起来你的问题与keypathsForValuesAffectingTotal只提到keyPath“itemlink”的事实有关.

由于这是多对多关系的路径,因此您有效地告诉您的出价对象观察变更集.集合所做的就是管理对象是否是其成员.这就解释了为什么在“itemlink”中添加或删除项目时会获得更新,但仅限于此.

您不仅对哪些项目是该组成员感兴趣,您还对这些成员的(可变)属性感兴趣 – 在这种情况下的价格.因此,除了上述内容之外,您还希望“itemlink”的每个成员通知所有观察者相关的投标对象的“总”密钥,即“价格”在发生变化时已经发生变化.

不幸的是,它并不像在BID类中添加“itemlink.price”作为依赖关键路径那么简单,因为KVO不允许您观察“通过”多对多关系.

如果对Item实体的实例使用NSManagedobject子类,则可以手动添加此功能.在Item类中覆盖automaticNotifIEsObserversForKey:告诉Cocoa您将手动为“price”键管理KVO通知,然后实现您自己的setPrice:方法,该方法发送相应的通知.像这样的东西:

- (voID)setPrice:(ID)inPrice{    // bID = inverse relationship of itemlink    [[self valueForKey:@"bID"] willChangeValueForKey:@"total"];    [self willChangeValueForKey:@"price"];    [self setPrimitiveValue:inPrice forKey:@"price"];    [self dIDChangeValueForKey:@"price"];    [[self valueForKey:@"bID"] dIDChangeValueForKey:@"total"];}
总结

以上是内存溢出为你收集整理的objective-c – 在多对多关系中观察依赖键全部内容,希望文章能够帮你解决objective-c – 在多对多关系中观察依赖键所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1024169.html

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

发表评论

登录后才能评论

评论列表(0条)

保存