WTAData提供了一种轻量级接口来设置异步CoreData堆栈。WTAData利用两个NSManagedObjectContext:主和后台,以实现快速而高效的核心数据访问。主上下文通常用于对核心数据堆栈进行读取访问。当后台管理的对象上下文保存更改时,主上下文将自动更新。后台上下文主要用于在后台线程中执行保存操作,例如在网络请求完成后。
通过提供Core Data模型,使用WTAData设置支持自动迁移的默认堆栈。
WTAData *data = [[WTAData alloc] initWithModelNamed:@"WTADataExample"];
堆栈创建后,即可使用。除了默认初始化之外,WTAData还提供了一些用于特定用例的初始化器,如下所示。
// Initialize a new configuration
WTADataConfiguration *configuration = [WTADataConfiguration defaultConfigurationWithModelNamed:@"WTADataExample"];
// Set flag for deleting the store on a model mis-match
[configuration setShouldDeleteStoreFileOnModelMismatch:YES];
// Set flag for deleting the store on sql integrity errors
[configuration setShouldDeleteStoreFileOnIntegrityErrors:YES];
// Set flag for using an in-memory store
[configuration setShouldUseInMemoryStore:YES];
[[WTAData alloc] initWithConfiguration:configuration];
使用WTAData提供在NSManagedObject上提供的分类,轻松从存储中获取实体。
NSError *error = nil;
WTAData *data = <initialized stack>
[ManagedObject fetchInContext:data.mainContext error:&error];
有关更多信息,请参阅NSManagedObject+WTAData.h中的附加助手。
WTAData提供简单机制在后台保存和创建数据。例如,在后台保存新条目就像以下代码行一样简单。
[self.data saveInBackground:^(NSManagedObjectContext *context) {
Entity *entity = [Entity createEntityInContext:context];
entity.stringAttribute = [NSString stringWithFormat:@"Entity Created"];
} completion:^(BOOL savedChanges, NSError *error) {
NSLog(@"Changes saved %d with error %@", savedChanges, error);
}];
WTAData提供一系列导入分类,帮助简化将JSON对象直接导入Core Data的过程。导入函数在NSManagedObject+WTADataImport.h中指定,并定义导入数组中JSON项目或导入单个项目的功能。导入函数还支持导入关系,并将使用关系中的对象上的导入功能。
WTAData允许您通过在管理对象模型的UserInfo字典中指定键值对来自定义和配置JSON导入。默认情况下,WTAData将JSON字典中的键映射到NSManagedObject中的属性名称。例如,JSON字典中的名为'data'的键将设置NSManagedObject的'data'属性。
可以通过在属性上添加“ImportName”键值对并指定 JSON 键的名称来实现自定义 JSON 键映射。例如,可以将 JSON 键“age_level”导入到“ageLevel”对象属性中,通过指定{ImportName: age_level}。
您可以在 JSON 中指定要映射到您模型中的主键的主键。这通过在实体的用户信息字典中添加‘PrimaryAttribute’键并将其值设置为应用于主键的属性名称来完成。
或者,如果您的实体指定了格式为`(entityName)ID`的属性,那么如果 JSON 中存在相同的键,则使用该值作为主属性。
WTAData默认使用 ISO8601 格式的字符串'yyyy-MM-dd'T'HH:mm:ssZZZZZ'来处理 JSON 中的日期字符串。您可以通过指定键'DateFormat'并将日期格式字符串作为属性的值传递来自定义此格式。
导入时关系提出了一个有趣的挑战,因为在关系中可能存在不应再作为关系一部分的实体,或者可能在导入 JSON 字典时需要合并数据。WTAData在导入关系时提供了自定义合并策略,涵盖了大多数常见用例。这些策略通过在关系上使用'mergePolicy'键并设置以下值来指定:
'Replace' - 替换关系策略(默认)
关系导入的默认策略。如果没有指定自定义合并策略,则使用此策略。删除所有现有关系项,并用 JSON 项替换它们。
'Merge' - 合并关系策略
根据主键更新关系中找到的任何现有对象。此策略不会删除任何对象。
'MergeAndPrune' - 合并和修剪关系策略
根据主键更新关系中找到的任何现有对象。从关系集中修剪不在导入集中的项。
**键** | **元素** | **值** | **描述** |
ImportName | 属性或关系 | 此属性映射到的 JSON 键的名称 | 允许指定映射到 NSManagedObject 属性的 JSON 键。 |
PrimaryKey | 实体 | 实体的主键名称 | 允许指定用于导入的主键。 |
DateFormat | 属性 | NSDate 日期格式字符串 | 允许指定导入字符串日期时使用的自定义日期格式。 |
MergePolicy | 关系 | 替换、合并或合并和修剪 | 允许指定合并逻辑。描述[在此](# Relationships and Import Behavior) |
与 WTAData 一起使用有两个主要导入,一个用于导入 JSON 对象的数组,另一个用于导入单个对象。以下是对这两个示例的说明
// Single entity import
PrimaryKeyEntity *entity = [PrimaryKeyEntity importEntityFromObject:entityWithDataContent
context:self.wtaData.mainContext];
// Array import
NSArray *importedObjects = [PrimaryKeyEntity importEntitiesFromArray:objectArray];
context:self.wtaData.mainContext];
其他导入方法在 NSManagedObject+WTADataImport.h 中定义