测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2015年12月 |
SPM支持SPM | ✗ |
由Piergiuseppe Longo,Michael Armstrong维护。
**从版本 >= 1.4 支持 SWIFT 2.0 ** ** 从版本 <= 1.3 支持 SWIFT 1.2 **
一个由多个 扩展 和 助手 组成的 Swift CoreData 框架,旨在为常见的 CoreData 任务带来便利并减少麻烦。
每个功能都可以独立使用,因此不需要对整个项目进行“买入”。例如,您可以使用自己的 NSFetchedResultsController
或 NSManagedObjectContext
,以及任何搜索器,甚至 SuperFetchedResultsControllerDelegate
我想向 MagicalRecord 致以崇高的敬意,我认为它为这类项目奠定了坚实的基础。尽管它有过起伏,但它似乎正处于重开发之中。显然,这个 Swift SuperRecord 项目的灵感来自于 MagicalRecord 所做的工作。
SuperRecord 由几个扩展组成,用于向您的 NSManagedObject 子类添加 MagicalRecord/ActiveRecord 风格的“查找器”,一个 FetchResultsControllerDelegate 类,用于处理对 UITableView 和 UICollectionView 的安全批量更新,以及一个实验性的模板 CoreData Stack 单例。
该项目是在 Swift 的几个版本上构建的,因此某些选择可能最初看起来有些奇怪。
git submodule add https://github.com/michaelarmstrong/SuperRecord.git SuperRecord
git clone https://github.com/michaelarmstrong/SuperRecord.git
现在直接将源文件添加到您的项目。
NSManagedObjectExtension.swift 这个扩展负责大部分的“查找器”功能,具有
deleteAll()
、findOrCreateWithAttribute()
、createEntity()
等操作,并允许您指定自己的NSManagedObjectContext
或使用默认的(在主线程上运行)。NSFetchedResultsControllerExtension.swift 正在不断开发中,此扩展可以轻松创建用于与
UICollectionView
和UITableView
一起使用的FetchedResultsControllers
,这些控制器使用SuperFetchedResultsControllerDelegate
来进行安全的批量更新。SuperFetchedResultsControllerDelegate.swift 受我在过去项目中的工作以及其他流行的开源项目的启发。此程序处理跨 iOS 7 和 iOS 8 的
UICollectionView
和UITableView
的 安全批量更新。它可以独立使用您的NSFetchedResultsController
,或者作为 SuperRecord 中包含的方法的一部分自动使用,这些方法是 breathed by。SuperCoreDataStack.swift 是一个实验性的样板文件主线程 CoreData 栈。既可以作为 sqlite 存储,也可以作为内存存储使用。只需调用
SuperCoreDataStack.defaultStack()
使用 SQLite 或SuperCoreDataStack.inMemoryStack()
以用于内存存储。当然,您有权访问您的上下文.context
/.saveContext()
假设您有一个类型为“Pokemon”的 NSManagedObject,您可以执行以下操作
let pokemon = Pokemon.createNewEntity() as Pokemon
请暂时将 @objc(className)
添加到所有 NSManagedObject
子类的名称之上(如演示项目所示)。未来将有更好的支持。
为了您的方便,SuperRecord 为 NSFetchedResultsController
增加了许多方便的工厂方法,以简化您的生活,但仍然是强大的。始终如一,您不必使用这些方法与 SuperRecord 一起使用,但这些方法都是为了您的方便而存在的。SuperRecord 的许多工厂方法将为您传递的 collectionView 或 tableView 处理安全的批量更新。不再有复杂的处理。
lazy var fetchedResultsController: NSFetchedResultsController = self.superFetchedResultsController()
func superFetchedResultsController() -> NSFetchedResultsController {
return NSFetchedResultsController.superFetchedResultsController("Pokemon", tableView: tableView)
}
或针对更多高级用法(某κολυμπούσης με πολλαπλές ενότητες και ένα predial με αυτόματα batch updates)
let sortDescriptors = [NSSortDescriptor(key: "evolutionLevel", ascending: false),NSSortDescriptor(key: "level", ascending: false)]
let predicate = NSPredicate(format: "trainer = %@", self.trainer)!
let tempFetchedResultsController = NSFetchedResultsController.superFetchedResultsController("Pokemon", sectionNameKeyPath: "evolutionLevel", sortDescriptors: sortDescriptors, predicate: predicate, collectionView: self.collectionView, context: context)
使用 Pokemon
作为您的 NSManagedObject
的实体名称。
我计划很快添加更多具有强大功能的删除功能,例如 deleteAllWithPredicate() 或 deleteEntity(),现在可用的仅为
Pokemon.deleteAll()
这不是所有方法和类的详尽列表,但它包括一些最有用的方法。
findAllWithPredicate(predicate: NSPredicate!, context: NSManagedObjectContext) -> NSArray
findAllWithPredicate(predicate: NSPredicate!) -> NSArray
deleteAll(context: NSManagedObjectContext) -> Void
deleteAll() -> Void
findAll(context: NSManagedObjectContext) -> NSArray
findAll() -> NSArray
findFirstOrCreateWithPredicate(predicate: NSPredicate!) -> NSManagedObject
findFirstOrCreateWithPredicate(predicate: NSPredicate!, context: NSManagedObjectContext) -> NSManagedObject
createNewEntity() -> NSManagedObject
findFirstOrCreateWithAttribute(attribute: NSString!, value: NSString!, context: NSManagedObjectContext) -> NSManagedObject
findFirstOrCreateWithAttribute(attribute: NSString!, value: NSString!) -> NSManagedObject
使用以下方法创建的 NSFetchedResultsController
将会自动处理传递给 UITableView
或 UICollectionView
的安全批量更新。
superFetchedResultsController(entityName: NSString!, collectionView: UICollectionView) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, tableView: UITableView) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, collectionView: UICollectionView!, context: NSManagedObjectContext!) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, tableView: UITableView!, context: NSManagedObjectContext!) -> NSFetchedResultsController
使用以下方法创建的 NSFetchedResultsControllers
需要您使用自己的 NSFetchedResultsControllerDelegate
类
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortedBy: NSString?, ascending: Bool, tableView: UITableView!, delegate: NSFetchedResultsControllerDelegate) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortedBy: NSString?, ascending: Bool, collectionView: UICollectionView!, delegate: NSFetchedResultsControllerDelegate) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, collectionView: UICollectionView!, delegate: NSFetchedResultsControllerDelegate) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, tableView: UITableView!, delegate: NSFetchedResultsControllerDelegate) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, collectionView: UICollectionView!, delegate: NSFetchedResultsControllerDelegate, context: NSManagedObjectContext!) -> NSFetchedResultsController
superFetchedResultsController(entityName: NSString!, sectionNameKeyPath: NSString?, sortDescriptors: NSArray?, predicate: NSPredicate?, tableView: UITableView!, delegate: NSFetchedResultsControllerDelegate, context: NSManagedObjectContext!) -> NSFetchedResultsController
整个项目处于持续开发中,是一个学习练习,并且已经提前发布以便可以从社区获得反馈。我在我每天工作的项目中使用它,希望它随着时间的推移会得到改进并增加更多功能、线程安全和错误处理。
目前正在进行替换 SuperCoreDataStack 的工作,以实现更好、更灵活和更简洁的实现,并获得在进行的 维基百科。如果您想帮忙,请与我们联系或提交一个 PR。