首先,我创建一个带有 NSFetchRequest
的 NSFetchedResultsController
,它获取实体"Entity"的所有对象 .
然后我插入一个新的NSManagedObject A,它是一个“Entity”的实例,和Edit B,它也是一个“Entity”的实例 .
然后我打电话给 NSArray *result = [fetchedResultsController -fetchedObjects]
,A和B会结果吗?
在整个项目中,我使用 only one NSManagedObjectContext .
如果我这样做,这在_2664147中意味着什么?
fetchedObjects获取的结果 . @property(nonatomic,readonly)NSArray * fetchedObjects讨论如果尚未调用performFetch:,则属性的值为nil . 结果数组仅包含由获取请求(fetchRequest)指定的实体的实例,并且与其谓词匹配 . (如果获取请求没有谓词,则结果数组包括获取请求指定的实体的所有实例 . )结果数组反映控制器的托管对象上下文中托管对象的内存中状态,而不是它们在持久存储 . 但是,返回的数组不会在插入,修改或删除托管对象时更新 .
3 回答
最后一句话的意思
是(基于我的实验):如果存储对提取的对象的引用
如果插入,修改或删除对象,则
result
引用的此数组将不会更新 . 所以重点是“ returned array 不......” .但如果你打电话
稍后,返回值是一个新的对象列表,包括更改 .
更确切地说:如果您设置了委托,FRC会跟踪对托管对象上下文的更改并调用FRC委托函数 . 插入/修改/删除对象时,不会立即调用委托函数
明确保存上下文时,或
在运行循环中处理更改通知时 .
一旦
controllerDidChangeContent:
被调用,对[fetchedResultsController fetchedObjects]
的新调用将返回更新的对象列表 .如果您希望在委托对象上进行即时更新,则@Dwayne在插入/删除/更新后使用
[fetchedResultsController.managedObjectContext processPendingChanges]
,通常在runloop结束时调用它 .我刚刚做了一个实验 . 似乎在此调用中更新了fetchedObjects的计数:
这意味着它每次被调用时都是一种增量行为?因为所有更改都已执行,所以在调用controllerDidChangeContent:时,是否已准备好整个列表?
@Maciek Czarnik感谢您的解释 . 但是,如果我们每次都不需要在这里调用[fetchedResultsController.managedObjectContext processPendingChanges]就可以获得更改 .
如果可能的话,我希望我可以让别人证实这个行为 .
谢谢 .