NSFetchedResultsController,修改NSFetchRequest?

Posted

技术标签:

【中文标题】NSFetchedResultsController,修改NSFetchRequest?【英文标题】:NSFetchedResultsController, modifying the NSFetchRequest? 【发布时间】:2012-09-03 15:12:42 【问题描述】:

我已经设置了一个NSFetchRequestController,它在其initWithFetchRequest: 参数中使用三个预计算机对象ID 作为NSPredicate

NSManagedObjectContext *moc = [[self managedDocument] managedObjectContext];
[self setFetchedResultsController:[[NSFetchedResultsController alloc]initWithFetchRequest:fRequest
                                                                     managedObjectContext:moc
                                                                       sectionNameKeyPath:nil
                                                                                cacheName:nil]];

我的问题是,一旦我设置了我的NSFetchedResultsController,当新数据在数据库中可用时,有没有办法修改控制器使用的NSFetchRequest。我注意到请求是只读的,所以就这样了,还有其他可用的选项吗?

编辑:

我想我需要更改整个请求,但也许我可以使用现有的 NSFetchedResultsController 和现有的 NSFetchRequest 设置一个新的 NSPredicate,这样可以吗?

【问题讨论】:

据我所知,没有改变 NSFetchedResultsController 的方法。你必须创建新的控制器。 我刚刚尝试了我在 EDIT 中所暗示的内容:它似乎允许在将 performFetch 消息发送到 NSFetchedResultsController 以显示更新之前修改 NSFetchReqest 以包含新的 NSPredicate。 【参考方案1】:

来自 Apple 文档: https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/

修改获取请求

您不能简单地更改获取请求来修改结果。如果您想更改获取请求,您必须:

如果您正在使用缓存,请将其删除(使用 deleteCacheWithName:)。

如果要更改获取请求,通常不应使用缓存。

更改获取请求。 (修改谓词)

调用 performFetch:.

【讨论】:

以上是关于NSFetchedResultsController,修改NSFetchRequest?的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?