CoreDataContext 1.0.0

CoreDataContext 1.0.0

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

Rafael Veronezi维护。



  • Rafael Veronezi

CoreDataContext

CoreDataContext是用Swift编写的Cocoa Touch框架,旨在允许快速集成Core Data到iOS项目中,并方便地在定义的实体上进行数据操作。

版本1.0发布

这个发布版本为库带来了改进

  • 允许定义不同于字符串的主键数据类型:类型在EntityDataSource声明中的第二个Type参数中定义(请查看以下示例)。这反映在接收PK作为参数的方法上,例如finddelete
  • 添加了自动编号主键生成:第一个版本只允许预加载自定义UUID值的字符串主键。新版本允许您设置自动编号生成。实现非常简单(记录计数+1)。
  • 允许定义自定义主键生成:除了UUID和自动编号生成器之外,您还可以自定义自己的主键生成函数。
  • 允许不定义主键生成:您可以基于PK记录工作。
  • 修复了方法中参数的文档。

安装

CoreDataContext完全用Swift实现,作为Cocoa Touch Framework Library分发,也可以通过CocoaPods使用。

Cocoa Touch Frameworks需要最低部署目标为iOS 8。如果您需要支持iOS 7的项目,您需要将源代码直接包含在您的项目中。

手动安装

CoreDataContext打包为Xcode项目,包含两个目标:1. CoreDataContext_iOS:一个Cocoa Touch Framework,用于与iOS项目链接。2. CoreDataCOntext_OSX:一个Cocoa框架,用于与OS X项目链接。

您可以将代码下载或克隆到项目中,或者将此仓库作为子模块克隆,然后根据所需平台将框架作为链接的二进制文件添加到应用程序的目标中。

如果您正在使用iOS 7的部署目标

将以下文件添加到您的源中

  • BaseDataContext.swift - 基本数据上下文类。
  • EntityDataSource.swift - 基础实体数据源类,提供 CoreDataContext 的所有 CRUD 功能。
  • Extensions/NSManagedObjectContext+Helpers.swift - 为基类中使用的 NSManagedObjectContext 类提供扩展。
  • Extensions/EntityDataSource+iOS.swift - 提供特定于 iOS 的数据源基类的扩展。 不应包含在 OS X 目标中
  • Helpers/CoreDataTableViewController.swift - 一个辅助基类,便于从使用 CoreDataContext 获取的数据中加载 UITableViewControllers。 适用于 iOS,不应包含在 OS X 目标中

用法

CoreDataContext 提供了非常简单的 API 来与您的 Core Data 模型实体交互。首先您需要从 BaseDataContext 扩展,它包含与 NSManagedObjectContext 的所有交互。使用它的超初始化器设置模型的名称。通过使用通用的 EntityDataSource 类声明访问您的实体的属性,并用实体和键字段名称初始化它们,如下面的 Sample Project 模板所示

class NotesContext: BaseDataContext {

//
// MARK: - Entity Data Source Properties

var categories: EntityDataSource<Category, NSNumber>!
var notes: EntityDataSource<Note, NSString>!

//
// MARK: - Initializers

init() {
super.init(resourceName: "Notes")

if let moc = self.managedObjectContext {
self.categories = EntityDataSource(managedObjectContext: moc,
entityName: "Category",
entityKeyName: "categoryId",
entityKeyGeneration: PrimaryKeyGeneration.AutoNumber);

self.notes = EntityDataSource(managedObjectContext: moc,
entityName: "Note",
entityKeyName: "noteId",
entityKeyGeneration: PrimaryKeyGeneration.UUID);            
}
}

}

可选地,您可以将数据上下文设置为 Singleton,添加属性

//
// MARK: - Singleton

class var sharedInstance: NotesContext {
struct Singleton {
static var instance: NotesContext?
static var token: dispatch_once_t = 0
}

dispatch_once(&Singleton.token) {
Singleton.instance = NotesContext()
}

return Singleton.instance!
}

确保适当地替换类型。以下几点需要注意

  • EntityDataSource 期望定义两种类型,第一种是您的实体类,它必须从 NSManagedObject 扩展,第二种是主键字段的类型。它必须是 Core Data 支持的类型。您还必须使用 Foundation 类,例如使用 NSNumber 对于整数和使用 NSString 对于字符串。
  • 主键可以是自动生成的,使用序列号、ID 或您提供的自定义闭包。

检查 EntityDataSource.swift 的源代码以查看所有可用的方法。以下是简短列表

  • add:添加一个新实体记录。
  • create:添加一个空记录。
  • clear:从实体中删除所有记录。
  • count:实体上的记录数,可选提供谓词进行过滤。
  • delete:从实体中删除一个记录。
  • getAll:获取此实体中所有记录,可选提供排序描述符。
  • find:根据 ID 获取记录或不存在时返回 nil。
  • first:根据谓词获取第一条记录。
  • filter:获取经过谓词过滤的记录列表,可选提供排序描述符。
  • update:更新记录数据。

示例项目

NotesApp 项是一个使用 CoreDataContext 提供简单模型管理的非常简单的笔记移动端应用。您可以从其 GitHub 仓库 查看并下载 Sample 项目代码。

备注

此库不是线程安全的。最好将其作为 Singleton 运行。其主要目标是为无复杂 Core Data 模型的简单和简单的项目服务。

感谢您使用 CoreDataContext。如果您喜欢此 API,请贡献并帮助我们在 Swift 的强大功能下创建更大的更完整的 Core Data API!欢迎 Fork 此存储库并发起您的 Pull Requests。