CoreData之NSFetchedResultsController

上篇文章写了数据的操作,今天简单的介绍NSFetchedResultsController的使用,文中不足之处还请各位小伙伴加以指正。

NSFetchedResultsController和TableView搭配会非常的好用,假设CoreData中的实体为Team,Team包含qualifyingZone、wins、teamName三个属性。

var fetchResultController : NSFetchedResultsController!
let fetchRequest = NSFetchRequest(entityName: "Team")

//可以通过以下方式进行信息排序,最终排序结果依赖 fetchRequest.sortDescriptors 数组中的数据顺序

let zoneSort = NSSortDescriptor(key: "qualifyingZone", ascending: true)
let scoreSort = NSSortDescriptor(key: "wins", ascending: false)
let nameSort = NSSortDescriptor(key: "teamName", ascending: true) 
fetchRequest.sortDescriptors = [zoneSort,scoreSort,nameSort]

 fetchResultController=NSFetchedResultsController(fetchRequest:fetchRequest,managedObjectContext:cdh.managedObjectContext,sectionNameKeyPath:"qualifyingZone", cacheName: "WordCup")
  fetchResultController.delegate = self 
    do{
        try fetchResultController.performFetch()
    }catch let error as NSError {
        print(error)
    }

/*
sectionNameKeyPath的值用来划分tableview的session,sectionNameKeyPath路径下有多少个值,tableview就会被划分多少个部分.如果不想分区可以将sectionNameKeyPath置为nil

cacheName:存放缓存数据的地方,避免每刷新一次都要从新请求,适用于数据较多的时候,独立于数据持久化存储。比如NSFetchedResultsController第一次从持久化存储中读取数据,如果有cacheName,第二次的数据会从缓存中读,比第一次会快一点
*/

TableView数据源

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return fetchResultController.sections!.count
}

override fun     tableView(tableView:UITableView,titleForHeaderInSection section:Int) -> String? {
    let sectionInfo = fetchResultController.sections![section]
    return sectionInfo.name
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let sectionInfo = fetchResultController.sections![section]
    return sectionInfo.numberOfObjects
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") 
    let team = fetchResultController.objectAtIndexPath(indexPath) as! Team
    cell.textLabel.text = team.teamName
    return cell
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看了一段时间的CoreData Codes,随着涉猎越多,便越发觉得CoreData设计之精妙。今日在此分享Cor...
    MapleMeowMeow阅读 3,487评论 2 4
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 1 前言 CoreData不仅仅是数据库,而是苹果封装的一个更高级的数据持久化框架,SQLite只是其提供的一种数...
    RichardJieChen阅读 3,046评论 2 2
  • 沪江高中数学刘爱洁老师:江湖人称爱姐,沪江首席高中数学资深教师,北京科技大学数学系研究生。授课过程饱含激情又带有欢...
    沪江中小幼阅读 269评论 0 0
  • “鸡功最巨,诸菜赖之,如善人积阴德而人不知。”这是袁枚在《随园食单》里对鸡的评价,我觉得十分贴切。因为鸡是肉...
    伯乌恩阅读 366评论 0 0