Ios Swift tableView.reloadData()似乎不起作用

Ios Swift tableView.reloadData()似乎不起作用,ios,uitableview,core-data,swift,Ios,Uitableview,Core Data,Swift,我刚刚使用CoreData和“masterdetailapplication”模板创建了一个新项目。我正在使用苹果提供的代码,我刚刚在fetchController中添加了一个nspredite var fetchedResultsController: NSFetchedResultsController { if _fetchedResultsController != nil { return _fetchedResultsContr

我刚刚使用
CoreData
和“
masterdetailapplication
”模板创建了一个新项目。我正在使用苹果提供的代码,我刚刚在fetchController中添加了一个
nspredite

        var fetchedResultsController: NSFetchedResultsController {
        if _fetchedResultsController != nil {
            return _fetchedResultsController!
        }

        let fetchRequest = NSFetchRequest()
        // Edit the entity name as appropriate.
        let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: self.managedObjectContext)
        fetchRequest.entity = entity

        // Here the code i added <<<<<<<<
        fetchRequest.predicate = NSPredicate(format: "year = %d", self.selectedYear)

        // Set the batch size to a suitable number.
        fetchRequest.fetchBatchSize = 20

        // Edit the sort key as appropriate.
        let sortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: false)
        let sortDescriptors = [sortDescriptor]

        fetchRequest.sortDescriptors = [sortDescriptor]

        // Edit the section name key path and cache name if appropriate.
        // nil for section name key path means "no sections".
        let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: "Master")
        aFetchedResultsController.delegate = self
        _fetchedResultsController = aFetchedResultsController

        var error: NSError? = nil
        if !_fetchedResultsController!.performFetch(&error) {
             // Replace this implementation with code to handle the error appropriately.
             // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
             //println("Unresolved error \(error), \(error.userInfo)")
             abort()
        }

        return _fetchedResultsController!
    }    
(我记录了func
changeYear
并调用了它)

因此,在此之后,我调用
self.tableView.reloadData()
来更新
UITableView
,它现在应该根据新谓词获取不同的记录,但是
tableView
永远不会更新 (我试图记录委托方法,但从未被激发)。 我错过了什么


我还尝试从
故事板
tableView
设置为
IBOutlet
,并尝试调用
self.tv.reloadData()
,但仍然没有任何结果。

获取的结果控制器不能以这种方式工作。您需要告诉它根据新谓词重新获取:

_fetchedResultsController = nil
self.tableView.reloadData()
另一种方法是更改FRC和call的fetch请求的谓词

self.fetchedResultsController.performFetch(&error)

这样就不需要使用
reloadData()
重新加载表,因为委托应该处理它。但是我假设您正在完全替换表的内容,因此上面的解决方案可能更简单,性能也一样

哦,是的,谢谢,就是这样!无论如何,对于使用此模板的任何人,您应该调用
\u fetchedResultController=nil
,而不是
self.fetchedResultController=nil
self.fetchedResultsController.performFetch(&error)