CoreDataKit 0.13.1

CoreDataKit 0.13.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2018年3月
SPM支持 SPM

Mathijs Kadijk 维护。



2016-04-09: 已淘汰

CoreDataKit 将不再添加新功能。它被用于多个项目中,可能会在新的 Swift 版本中更新,但不再是积极开发。

CoreDataKit

CoreDataKit 负责处理 CoreData 的艰难和啰嗦的部分。它为您管理子上下文,并帮助轻松获取、创建和删除对象。

CoreData: 对象图管理解决方案,包括持久化。 Kit: 用于特定目的所需的设备集。

安装

CocoaPods 是将 CoreDataKit 添加到项目中的推荐方法。以下是一个包含 CoreDataKit 的基本 Podfile 示例

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'CoreDataKit'

版本指南

  • Swift 4: 使用 0.13 及以上版本
  • Swift 3: 使用 0.12
  • Swift 2.3: 使用 0.11
  • Swift 2.2: 使用 0.10

用法

设置由自动迁移的SQLite存储支持的栈最基本和最常用的变体是以下这种

// Initialize CoreData stack
if let persistentStoreCoordinator = NSPersistentStoreCoordinator(automigrating: true) {
  CDK.sharedStack = CoreDataStack(persistentStoreCoordinator: persistentStoreCoordinator)
}

实现 NamedManagedObject 协议

为了使 CoreDataKit 能够使用您的 NSManagedObject 子类,例如下面的示例中的 Car,CDK 需要您的子类实现 NamedManagedObject 协议,以便初始化您的类

class Car: NSManagedObject, NamedManagedObject {

  static var entityName = "Car" // corresponding to your Entity name in your xcdatamodeld
  
  @NSManaged var color: String
  @NSManaged var model: String
}

从这里开始,您可以使用共享的栈。例如,要创建并保存一个实体,此示例在一个后台上下文中执行一个块,将其保存到持久存储,并执行一个完成处理程序

CDK.performOnBackgroundContext(block: { context in
  do {
    let car = try context.create(Car.self)
    car.color = "Hammerhead Silver"
    car.model = "Aston Martin DB9"

    return .saveToPersistentStore
  }
  catch {
    return .doNothing
  }
}, completionHandler: { result in
  do {
    try result()
    print("Car saved, time to update the interface!")
  }
  catch {
    print("Saving Harvey Specters car failed with error: \(error)")
  }
})

使用承诺

如果您更喜欢使用承诺,而不是这个库的回调风格,您可以使用 Promissum 库与 CoreDataKit 一起使用。使用 CoreDataKit+Promise 扩展,上面的示例可以重写如下

let createPromise = CDK.performOnBackgroundContextPromise { context in
  do {
    let car = try context.create(Car.self)
    car.color = "Hammerhead Silver"
    car.model = "Aston Martin DB9"

    return .saveToPersistentStore
  }
  catch {
    return .doNothing
  }
}

createPromise
  .then { _ in
    print("Car saved, time to update the interface!")
  }
  .trap { error in
    print("Saving Harvey Specters car failed with error: \(error)")
  }

贡献

我们将很高兴看到贡献,请在问题跟踪器中报告错误,创建拉取请求(请分支为 develop)并提出新功能建议(也在问题跟踪器中)。

许可证 & 致谢

CoreDataKit 由 Mathijs Kadijk 编写,并可在 MIT 许可证 下使用,因此您可以在商业和非商业项目中免费使用它。CoreDataKit 是基于 MagicalRecord 启发的。