Objective c KVO和核心数据,通过观察仅获取更改的值
所以我对核心数据和KVO是相当陌生的,但我有一个NSManagedObject子类,它成功地观察到了自己的多对多关系。问题是,对于观察到的更改,我只想遍历添加或删除的对象集。是否有直接访问这些项目的方法?或者我必须做一些相对低效的事情,比如:Objective c KVO和核心数据,通过观察仅获取更改的值,objective-c,core-data,key-value-observing,nsset,Objective C,Core Data,Key Value Observing,Nsset,所以我对核心数据和KVO是相当陌生的,但我有一个NSManagedObject子类,它成功地观察到了自己的多对多关系。问题是,对于观察到的更改,我只想遍历添加或删除的对象集。是否有直接访问这些项目的方法?或者我必须做一些相对低效的事情,比如: NSSet* newSet = (NSSet*)[change objectForKey:NSKeyValueChangeNewKey]; NSSet* oldSet = (NSSet*)[change objectForKey:NSKeyValueCha
NSSet* newSet = (NSSet*)[change objectForKey:NSKeyValueChangeNewKey];
NSSet* oldSet = (NSSet*)[change objectForKey:NSKeyValueChangeOldKey];
NSMutableSet* changedValues = [[NSMutableSet alloc] initWithSet:newSet];
[changedValues minusSet:oldSet];
我觉得你应该能够避免这种情况,因为在这些信息中
[self willChangeValueForKey:forSetMutation:usingObjects:];
[self didChangeValueForKey:forSetMutation:usingObjects:];
你正在把添加/删除的对象交给它!也许了解这些物体发生了什么会有所帮助?当您注册观察一个物体时,包括该选项(如果您愿意,也包括该选项)。您是否实际检查了KV观察提供的“旧”和“新”值的内容?当我观察到由
didChangeValueForKey:forSetMutation:usingObjects:
触发的可变集合中的更改时,NSKeyValueChangeNewKey的更改字典值只保存任何添加的对象,而NSKeyValueChangeOldKey的值只保存任何删除的对象,因此您不必手动找出更改了什么。但是,由didChangeValue:forKey:
触发的观察将为您提供NSKeyValueChangeOldKey的整个旧集合和NSKeyValueChangeNewKey的整个新集合,即使它们的内容相同。谢谢,我已经这样做了,但很好地澄清了这一点。如果可能的话,我还是宁愿避免这个解决方案。啊,谢谢!我想我只是从集合中减去已经丢失的项目,然后:P我相信我在苹果文档中的某个地方读到了后一种情况,但我没有意识到它对didChangeValueForKey:with setmutation:usingObjects:
的应用是不同的,不是很直观吗?