Core data NSFetchedResultsController:它如何知道要为哪些对象调用其委托?

Core data NSFetchedResultsController:它如何知道要为哪些对象调用其委托?,core-data,Core Data,有人想推测一下NSFetchedResultsController的内部工作原理吗 具体来说:它如何知道要为哪些对象调用其委托方法?如果我要实现NSFRC,我会这样做:1)注册托管上下文中的所有通知,2)当我收到通知时,对照NSFRC中获取请求的实体类型检查对象的类型,并检查NSFRC中的谓词(如果存在)是否为该对象返回true,如果两者都为真,则调用代理的…didChangeObject。。。方法 看起来有点笨重,尤其是那种类型检查(使用isKindOf?)。只是询问,因为我需要在这方面实现与

有人想推测一下NSFetchedResultsController的内部工作原理吗

具体来说:它如何知道要为哪些对象调用其委托方法?如果我要实现NSFRC,我会这样做:1)注册托管上下文中的所有通知,2)当我收到通知时,对照NSFRC中获取请求的实体类型检查对象的类型,并检查NSFRC中的谓词(如果存在)是否为该对象返回true,如果两者都为真,则调用代理的…didChangeObject。。。方法


看起来有点笨重,尤其是那种类型检查(使用isKindOf?)。只是询问,因为我需要在这方面实现与NSFRC类似的功能。

托管对象上下文广播一系列通知,通知的用户信息字典包含插入、删除或更新的托管对象

例如

NSManagedObjectContextObjectsIDChangeNotification

当属性的值 托管对象中包含的对象 上下文发生了变化。通知 是在 processPendingChanges,在 已处理更改,但 在安全调用save之前:再次 (如果您尝试,您将生成一个 无限循环)

通知对象是托管对象 对象上下文。用户信息 字典包含以下内容 密钥:NSInsertedObjectsKey, NSUpdatedObjectsKey,以及 NSDeletedObjectsKey


然后,FRC只检查返回对象的实体是否与自己的实体相匹配,并发送其委托消息

+1个很棒的问题,我也想知道,但还没有时间去研究它(现在转移到Mac上)。是的,正如我所写的:所以“只检查实体”位将涉及到类型检查对象(它是否只是object.entity==offetchRequest.entity的指针比较),然后检查谓词是否存在,与对象匹配。对吗?感谢您的确认。它不会对对象进行类型检查,因为在大多数情况下,它将是一个已配置为对特定实体建模的通用NSManagedObject实例。您可以使用同一个NSManagedObject类对数十个实体进行建模。相反,它检查NSManagedObject.entity值,该值返回NSEntityDescription对象。但除此之外,我相信是的。