超级棒的基于 Core Data 驱动的 iOS UI,使用 Swift 编写
AECoreDataUI 之前是 AERecord 的一部分,所以您可能也想查看一下。
当涉及到将数据与 UI 连接时,一个很好的方法是使用 NSFetchedResultsController。斯坦福大学 CS193p 课程 中的 CoreDataTableViewController 封装器在这方面做得非常出色,所以我用 Swift 重写了它,并以同样的方式制作了 CoreDataCollectionViewController。
您可以查看 这个演示项目 作为示例。
CoreDataTableViewController 主要只是将代码从 NSFetchedResultsController 文档页面复制到 UITableViewController 的子类中。
只需对其进行子类化并设置其 fetchedResultsController 属性。
之后,您只需要实现 tableView(_:cellForRowAtIndexPath:),fetchedResultsController 将处理其他必需的数据源方法。当底层数据发生更改时(插入、删除、更新、移动),它还会更新 UITableView。
import UIKit
import CoreData
class MyTableViewController: CoreDataTableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
refreshData()
}
func refreshData() {
let sortDescriptors = [NSSortDescriptor(key: "timeStamp", ascending: true)]
let request = Event.createFetchRequest(sortDescriptors: sortDescriptors)
fetchedResultsController = NSFetchedResultsController(fetchRequest: request,
managedObjectContext: AERecord.Context.default,
sectionNameKeyPath: nil, cacheName: nil)
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
if let frc = fetchedResultsController {
if let object = frc.objectAtIndexPath(indexPath) as? Event {
cell.textLabel.text = object.timeStamp.description
}
}
return cell
}
}
与 CoreDataTableViewController 相同,只是使用 CoreDataCollectionViewController。
.Package(url: "https://github.com/tadija/AECoreDataUI.git", majorVersion: 4)
github "tadija/AECoreDataUI"
pod 'AECoreDataUI'
AECoreDataUI 在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE。