NSFetchedResultsController performFetch 不起作用

Posted

技术标签:

【中文标题】NSFetchedResultsController performFetch 不起作用【英文标题】:NSFetchedResultsController performFetch doesn't work 【发布时间】:2015-10-02 08:00:52 【问题描述】:

我在屏幕上进行了分段控制。第一个分段项目用于广告(广告表),第二个分段项目用于订单(订单表)。 每次当用户选择分段项时,我都会重新创建 NSFetchResultController 的实例,并对另一个数据表进行新的提取请求(但在 UI 上我总是只有一个 UITableView self.tableViewMain):

let entityName = screen == ProfileScreen.Ads ? kDB_entity_DBAd : kDB_entity_DBOrder
let entityDescription = NSEntityDescription.entityForName(entityName, inManagedObjectContext: (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext)
let fetchRequest = NSFetchRequest()
fetchRequest.entity = entityDescription
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: (UIApplication.sharedApplication().delegate! as! AppDelegate).managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
do 
    try fetchedResultsController!.performFetch()
 catch 
    print("An error occurred in fetchresultcontroller")

但第一次它正确地重新加载数据,但第二次 fetchresultcontroller 甚至没有重新加载表(numberOfRowsInSection and cellForRowAtIndexPath 未被调用)。因此,当我调用fetchedResultsController!.performFetch()时,第二次 NSFetchResultController 的新实例(与核心数据中的第二个表相关)没有做任何事情

【问题讨论】:

【参考方案1】:

您应该调用tableViewMain.reloadData() 来让表自行重新加载。

【讨论】:

以上是关于NSFetchedResultsController performFetch 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

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