核心数据:,这个方法会反映对象的变化吗?

首先我创build一个带有NSFetchedResultsControllerNSFetchRequest ,它获取实体“Entity”的所有对象。

然后插入一个新的NSManagedObject A(它是“Entity”的一个实例)和Edit B(它也是“Entity”的一个实例)。

那么我调用NSArray *result = [fetchedResultsController -fetchedObjects] ,会得到A和B的结果吗?

在整个项目中,我使用一个 NSManagedObjectContext。

如果我这样做,这在文档中意味着什么?

fetchedObjects获取的结果。

@property(nonatomic,只读)NSArray * fetchedObjects讨论如果performFetch:没有被调用,属性的值是nil。

结果数组只包含由获取请求(fetchRequest)指定的实体的实例并且与其谓词相匹配。 (如果获取请求没有谓词,则结果数组包含由获取请求指定的实体的所有实例。)

结果数组反映了控制器托pipe对象上下文中托pipe对象的内存中状态,而不是持久性存储中的状态。 但是,返回的数组不会随着托pipe对象的插入,修改或删除而更新。

最后一句的意思

…但是,返回的数组不会随着托pipe对象的插入,修改或删除而更新。

是(基于我的实验):如果你存储一个引用到获取的对象

 NSArray *result = [fetchedResultsController fetchedObjects]; 

那么如果插入,修改或删除对象, 则由 result 引用的此数组将不会更新。 所以重点是“ 返回的数组不…”。

但是,如果你打电话

 [fetchedResultsController fetchedObjects] 

以后再次,返回值是一个新的对象列表,包括更改。

更确切地说:如果您已经设置了委托,则FRC会跟踪对受pipe对象上下文的更改并调用FRC委托函数。 当插入/修改/删除对象时,不会立即调用委托函数,但是也可以

  • 当上下文被显式保存时,或者
  • 在运行循环中处理更改通知时。

一旦controllerDidChangeContent:被调用,对[fetchedResultsController fetchedObjects]的新的调用将返回更新的对象列表。

@Dwayne在插入/删除/更新之后使用[fetchedResultsController.managedObjectContext processPendingChanges] ,如果你想对你的委托对象进行即时更新,通常在runloop结束时调用它。

我刚刚也做了一个实验。 在这个调用中,似乎fetchedObjects的计数已经更新:

  • (void)控制器:(NSFetchedResultsController *)控制器didChangeObject:(ID)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)typesnewIndexPath:(NSIndexPath *)newIndexPath

这是否意味着每次调用它时都是增量行为? 当controllerDidChangeContent:被调用,因为所有的改变都已经被执行了吗?

@Maciek Czarnik谢谢你的解释。 但是,如果我们每次都可以获取更改[fetchedResultsController.managedObjectContext processPendingChanges],则不必在此处调用。

如果可能的话,我希望我能让其他人确认这个行为。

谢谢。