超级棒的基于 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。