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!
}
(我记录了funcchangeYear
并调用了它)
因此,在此之后,我调用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)