简单试用CoreData|简单试用CoreData - NSFetchedResultsController
首先创建一个NSFetchedResultsController
var fetchedResultsVC : NSFetchedResultsController!
var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
再创建一个空命令
let fetchRequest = NSFetchRequest(entityName: "Item")
创建数组排序,按照key值升序或者降序排列
let sortDesctiptor = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sortDesctiptor]
创建NSFetchedResultsController
fetchedResultsVC = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: appDelegate.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
添加NSFetchedResultsController的协议(NSFetchedResultsControllerDelegate)
fetchedResultsVC.delegate = self
执行
do {
try fetchedResultsVC.performFetch()
}catch let error{
print(error)
}
由于目前能力有限,还不清楚如何使得添加数据时保持section不划分,So,添加如下以免报错:
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return (fetchedResultsVC.sections?.count)!
}
NSFetchedResultsControllerDelegate遵循的方法
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView!.beginUpdates()
}
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
tableView!.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
case .Delete:
tableView!.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
case .Update:
let cell = tableView!.cellForRowAtIndexPath(indexPath!)
let model = fetchedResultsVC.objectAtIndexPath(indexPath!) as? Item
cell!.textLabel?.text = model!.name
cell!.detailTextLabel?.text = "\(model!.score)"
case .Move:
tableView!.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
tableView!.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
}
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {完了。
tableView!.endUpdates()
}
【简单试用CoreData|简单试用CoreData - NSFetchedResultsController】但是在didChangeObject这个方法中case .Move:之前没有写的时候,添加数据时tableView没有刷新,但是添加了case .Move:和里面的方法以后数据就正常了,我也不知道是不是xcode抽风了。
推荐阅读
- 科学养胃,别被忽悠,其实真的很简单
- opencv|opencv C++模板匹配的简单实现
- 合理情绪疗法之试用|李克富思维训练营56/90
- 松软可口易消化,无需烤箱超简单,新手麻麻也能轻松成功~
- 简单心理2019春A期+32+张荣
- 《算法》-图[有向图]
- android防止连续点击的简单实现(kotlin)
- 机器学习一些简单笔记
- Android超简单实现沉浸式状态栏
- v-charts简单使用