在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 – 在多对多关系中观察依赖键所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)