我需要能够动态创建
NSFetchedResultsController
,并且很好奇这是否可能。这样做的基础是我需要能够根据变量获取结果。据我了解,我需要多个 NSFRC 来处理多个请求(这将是一个 UISegmentControl TableView
)。问题是我不知道我需要多少个控制器,因为它根据我的 API 返回的内容而变化。
有没有更好的方法,我可以不直接将变量传递给 NSFRC 作为谓词吗?
寻找最佳选择来处理这个问题。
一个例子是:
我的作业有 13 种不同的状态(打开、暂停、取消等),获取所有作业然后运行过滤器会极大地减慢返回约 50K 记录的应用程序的速度。
所以我的想法是获取状态'使用状态作为谓词,然后从该状态的 API 作业中获取。
我最好的方法是什么?
您可以毫无问题地修改
NSFetchRequest
的 NSFetchedResultsController
。文档中有一个关于此主题的特殊部分。如果您使用缓存,则需要将其删除,然后您可以更改获取请求并在您的 performFetch:
上再次调用 NSFetchedResultsController
。诀窍是修改控制器上现有的NSFetchRequest
,而不是尝试设置新的获取请求,这是行不通的。
在您的情况下,您可能希望通过调用
-[NSFetchRequest setPredicate:]
设置获取请求的谓词
[NSFetchedResultsController deleteCacheWithName:cacheName];
[self.controller.fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"status == %@", currentStatus]];
NSError* error = nil;
if (![self.controller performFetch:&error]) {
NSLog(@"Error updating fetch: %@", error);
}
这应该可以实现你想要的。