对GitHub&CoreData项目的改造及完善
2016-11-12 10:27
302 查看
GitHub&CoreData(以下简称GC)项目是一个可以实时从GitHub的swift‘s Project里抓取更新的App。
其中用到了第三方的json库SwiftyJSON,以及用来保存,枚举以及修改数据的NSFetchedResultsController对象。
但是该项目在实际运行时用NSFetchedResultsController分组显示的内容却是乱的,相关初始化代码如下:
此时的运行结果如下:
可以看到我以commit的作者分组,但是实际每组的元素是乱序的,根本不是以author来分布的!
那么错误在哪里呢!?原因就在于我们初始化NSFetchRequest的时候选择的排序关键字不正确,如果你要在NSFetchedResultsController启用分组,那么第一个排序关键字必须与实际分组的关键字一致,然后在用第二排序关键再排序每组内的元素。
将之前初始化代码修改如下:
再看一下运行结果:
这下OK了!
接下来GC项目里有一块未完成的部分,即在用户点击列表视图中的一个commit时,会切换至详细视图,在导航栏的右上角的显示与该commit相同author 的所有commits按钮的功能并未完成:
这个很好办!因为该导航栏按钮时动态生成的所以我们只得用代码动态生成所有界面,否则直接在IB中创建VC也是很方便的。
创建一个新的AuthorCommitsTableViewController类,派生自UITableViewController;添加2个属性:
分别表示与该VC相关的author和该author下的所有commits,将该VC的初始化方法修改为如下代码:
然后补全齐TableView的相关代码:
再回到DetailViewController.swift中添加如下方法:
我们用短短几行代码已经完成了所需要的功能:
其中用到了第三方的json库SwiftyJSON,以及用来保存,枚举以及修改数据的NSFetchedResultsController对象。
但是该项目在实际运行时用NSFetchedResultsController分组显示的内容却是乱的,相关初始化代码如下:
let fetch = NSFetchRequest<Commit>(entityName:"Commit") let sortDate = NSSortDescriptor(key: "date", ascending: false) fetch.sortDescriptors = [sortDate] fetch.fetchBatchSize = 20 fetchResultsController = NSFetchedResultsController(fetchRequest: fetch, managedObjectContext: managedObjectContext, sectionNameKeyPath: "author.name", cacheName: nil) fetchResultsController.delegate = self
此时的运行结果如下:
可以看到我以commit的作者分组,但是实际每组的元素是乱序的,根本不是以author来分布的!
那么错误在哪里呢!?原因就在于我们初始化NSFetchRequest的时候选择的排序关键字不正确,如果你要在NSFetchedResultsController启用分组,那么第一个排序关键字必须与实际分组的关键字一致,然后在用第二排序关键再排序每组内的元素。
将之前初始化代码修改如下:
let fetch = NSFetchRequest<Commit>(entityName:"Commit") let sortDate = NSSortDescriptor(key: "date", ascending: false) let sortName = NSSortDescriptor(key: "author.name", ascending: false) fetch.sortDescriptors = [sortName,sortDate] fetch.fetchBatchSize = 20 fetchResultsController = NSFetchedResultsController(fetchRequest: fetch, managedObjectContext: managedObjectContext, sectionNameKeyPath: "author.name", cacheName: nil) fetchResultsController.delegate = self
再看一下运行结果:
这下OK了!
接下来GC项目里有一块未完成的部分,即在用户点击列表视图中的一个commit时,会切换至详细视图,在导航栏的右上角的显示与该commit相同author 的所有commits按钮的功能并未完成:
这个很好办!因为该导航栏按钮时动态生成的所以我们只得用代码动态生成所有界面,否则直接在IB中创建VC也是很方便的。
创建一个新的AuthorCommitsTableViewController类,派生自UITableViewController;添加2个属性:
var author:Author! var commits:[Commit]!
分别表示与该VC相关的author和该author下的所有commits,将该VC的初始化方法修改为如下代码:
override func viewDidLoad() { super.viewDidLoad() tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") commits = author.commits.allObjects as! [Commit] }
然后补全齐TableView的相关代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) let commit = commits[indexPath.row] cell.textLabel?.text = "\(commit.author.name): \(commits[indexPath.row].message)" return cell } override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return commits.count }
再回到DetailViewController.swift中添加如下方法:
func showAuthorCommits(){ let authorCommitsVC = AuthorCommitsTableViewController() authorCommitsVC.author = detailItem?.author navigationController?.pushViewController(authorCommitsVC, animated: true) }
我们用短短几行代码已经完成了所需要的功能:
相关文章推荐
- 对GitHub&CoreData项目的改造及完善
- 对GitHub&CoreData项目的改造及完善
- coredata 快速过滤查询 再次封装 是coredata更加容易操作https://github.com/halostatue/coredhalostatue/coredata-easyfetch
- 第十五周项目五:简单电子词典····暂时先这样吧!有些缺陷,以后再回来完善······
- 【SSH项目实战】国税协同平台-19.信息发布管理完善&ueditor文本编辑插件
- 可删除超炫&多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载
- iOS Newbie - Xcode 7 & iOS 9 Core Data & FetchedResultsController
- IOS6 编程:Core Data持久化数据存储(5)-使用Core Data模板创建EntLibCart项目
- Top Data Scientists to Follow & Best Data Science Tutorials on GitHub
- XMPP框架 微信项目开发之CoreData学习——使用CoreData建立多个数据库
- XMPP框架 微信项目开发之CoreData学习——CoreData的查询方式(模糊查询,嵌套查询,分页查询)
- The Data scientist's Toolbox -- git&github基础命令
- 第九周【项目1】在第8周项1的基础上(1)再定义一目运算符 -,-c相当于0-c(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- coredata&加密
- (转)Core Data2
- 【SSH项目实战】国税协同平台-19.信息发布管理完善&ueditor文本编辑插件
- iOS基础教程:在建好的项目中加入CoreData[转]
- (转)Core Data1
- OS-->使用GITHub搭建 个人(组织)网站 和 项目网站
- iOS core Data 详解-<1>基本使用