更改 NSFetchedResultsController 的 fetchRequest.predicate 不会触发委托

mea*_*ers 5 objective-c nsfetchedresultscontroller nsfetchrequest ios

NSPredicate我的 FRC 上有一个fetchRequest。在某个时刻,一个对象被添加到 CoreData,我创建一个新谓词,更新fetchRequest并执行获取:

self.fetchedAddressesController.fetchRequest.predicate = self.predicate;
BOOL success = [self.fetchedAddressesController performFetch:nil];
Run Code Online (Sandbox Code Playgroud)

然而,这不会调用 FRC 的委托方法,例如controllerWillChangeContent:. 而且我的表视图没有更新。

但是,当我添加以下行时:

[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

在上面显示的两个下方,我确实看到了预期的更新。这说明要显示的数据确实发生了变化。

我检查了新的谓词,没有问题。我还将 FRC 设置delegateself,并且在其他情况下调用其方法。

已经有什么想法可能是错的吗?

stu*_*stu 4

您所描述的行为是预期的。根据Apple文档,如果你想修改NSFetchedResultsController上的获取请求,你必须删除缓存(如果你正在使用缓存),修改NSFetchRequest,然后调用performFetch:(这不会调用任何委托方法)。

如果你想知道谓词之间发生了什么变化,你需要存储旧的状态并进行比较。我过去为此使用过的一个库是Doppelganger