CYCoreData 0.1.3

CYCoreData 0.1.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2014年12月

Scott Joneshatebyte 维护。



  • Scott Jones

CYCoreData 利用父级/子级关系 NSManagedObjectContext 提供的功能来隐藏将数据写入磁盘的过程,从而保持主运行循环的流畅。通过最少的规则,任何人都可以编写一个多线程的应用程序,并尽可能地保持屏幕交互的效果,同时避免父级/子级上下文产生的竞争条件。

包含几个 NSManagedObject 类别方法,用于读取和写入数据。CYCoreData 旨在减少开发者编写频繁的谓词/sortDescriptor 代码。

示例项目展示了如何使用 CYCoreData 与类似的网络框架(如 AFNetworking)一起使用。

安装

CYCoreData 可通过 CocoaPods 安装,只需将以下行添加到您的 Podfile 中即可

 pod 'CYCoreData', '~> 0.1.2'

文档

更多信息,请见 http://cynicalcocoa.github.io/cycoredata/

使用

创建和配置

可选:如果模型对象的唯一标识符不是一个 int 或不遵循 uid 惯例,则立即进行配置。

[CYCoreData configureModelUniqueIdentifier:@"uid" ofDataType:UniqueObjectValueTypeString withJSONSearchString:@"id"];

示例应用程序以此方式使用 CYCoreData 的子类,以便可以使用单独的实例在任何地方访问数据。

CYCoreData *cyCoreData = [[CYCoreData alloc] initWithSqliteFileName:@"example_database" withModelFileName:@"ExampleModel"];
[cyCoreData createStoreAndManagedObjectModel];

保存/重置

同步 表示将更改写入磁盘的上下文将使用阻塞的 performBlockAndWait

[[cyCoreData tempContext] saveSynchronously];

异步 表示将更改写入磁盘的上下文将使用非阻塞的 performBlock 并立即返回

[[cyCoreData tempContext] saveAsynchronously];

重置 将清除整个数据库。从头开始。无需再次进行配置。

[cyCoreData reset]

写入示例

在写入数据库时,创建一个新的临时上下文。

NSManagedObjectContext *tempContext = [cyCoreData temporaryWriteContext];

然后创建或更新数据。

NSDictionary *properties = @{ @"id": 24, @"first_name" :@"Scott", @"last_name" : @"Storch" }
User *user = [User updateOrCreateObjectInContext:tempContext withDictionary:properties];

// NOTE: updateOrCreateObjectInContext by default searches the dictionary passed in for
// the key @"id" and fetches the NSManagedObject(User) by propertyKey @"uid". To change this,
// use [configureModelUniqueIdentifier:ofDataType:withJSONSearchString:] mentioned above.

然后立即调用 tempContext 的保存方法。

[tempContext saveAsynchronously];

读取示例

在调用 [tempContext saveAsynchronously]; 之后,您可以随时从 [cyCoreData readContext] 读取数据。使用读取 NSManagedObject+CYCoreData 类别方法以提高效率。

NSManagedObjectContext *readContext = [CYCoreData readContext];
NSArray *users = [User fetchAllInContext:readContext];

只要在保存 tempContext 之后进行此操作,就不会存在竞争条件。来自 tempContext 的更改已推送到 readContext,并准备由主运行循环查询。

致谢

许多灵感和知识使 CYCoreData 成为可能,这些知识来源于以下来源。

http://www.cocoanetics.com/2012/07/multi-context-coredata/

Core-Data-Management-Pragmatic-Programmers

JCDCoreData

作者

hatebyte, [email protected]

许可证

CYCoreData 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。

如果我们某天相遇,并且你喜欢它,你可以给我买一杯啤酒。

或者发比特币!

Alt text