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
hatebyte, [email protected]
CYCoreData 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。
如果我们某天相遇,并且你喜欢它,你可以给我买一杯啤酒。
或者发比特币!