测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2016年10月 |
SPM支持 SPM | ✓ |
由Christoffer Winterkvist,Elvis Nuñez维护。
将您的 Core Data 对象映射到您的 JSON 提供的后端从未如此简单。
{
"firstName": "John",
"lastName": "Hyperseed"
}
NSDictionary *values = [JSON valueForKey:@"user"];
[user hyp_fillWithDictionary:values];
您的 Core Data 实体应该与后端模型匹配。您的属性应该与其 JSON 对应属性匹配。例如,firstName
映射到 firstName
,address
到 address
。
这个规则有两个例外
id
应该匹配 remoteID
entityName
(例如 type
变成 userType
,description
变成 userDescription
等) 为前缀。在 JSON 中它们不需要改变,例如您可以保留 type
和 description
。保留属性的全列表可以在 这里找到。{
"first_name": "John",
"last_name": "Hyperseed"
}
NSDictionary *values = [JSON valueForKey:@"user"];
[user hyp_fillWithDictionary:values];
您的 Core Data 实体应该与后端模型匹配,但是以 camelCase
格式。您的属性应该与其 JSON 对应属性匹配。例如,first_name
映射到 firstName
,address
到 address
。
这个规则有两个例外
id
应该匹配 remoteID
entityName
(例如 type
变成 userType
,description
变成 userDescription
等) 为前缀。在 JSON 中它们不需要改变,例如您可以保留 type
和 description
。保留属性的全列表可以在 这里找到。如果您想映射 Core Data 属性和具有不同命名的 JSON 属性,您可以通过在用户信息框中添加 hyper.remoteKey
并输入您要映射的值来实现。
为了映射数组和字典,只需在 Core Data 模型器上将属性设置为 Binary Data
即可。
我们默认支持 ISO 8601 和 Unix 时间戳,因为这些是在解析日期时最常见格式,同时我们还有一个 非常高效的字符串解析方法,它克服了使用 NSDateFormatter
的性能问题。
NSDictionary *values = @{@"created_at" : @"2014-01-01T00:00:00+00:00",
@"updated_at" : @"2014-01-02",
@"published_at": @"1441843200"
@"number_of_attendes": @20};
[managedObject hyp_fillWithDictionary:values];
NSDate *createdAt = [managedObject valueForKey:@"createdAt"];
// ==> "2014-01-01 00:00:00 +00:00"
NSDate *updatedAt = [managedObject valueForKey:@"updatedAt"];
// ==> "2014-01-02 00:00:00 +00:00"
NSDate *publishedAt = [managedObject valueForKey:@"publishedAt"];
// ==> "2015-09-10 00:00:00 +00:00"
如果您的日期不符合ISO 8601标准,您也可以使用转换器属性来解析您的日期。首先将您的属性设置为Transformable
,然后设置转换器名称,例如在以下示例中是DateStringTransformer
您可以在DateStringTransformer中找到日期转换器的示例。
NSDictionary *values = @{@"hobbies" : @[@"football",
@"soccer",
@"code"]};
[managedObject hyp_fillWithDictionary:values];
NSArray *hobbies = [NSKeyedUnarchiver unarchiveObjectWithData:managedObject.hobbies];
// ==> "football", "soccer", "code"
NSDictionary *values = @{@"expenses" : @{@"cake" : @12.50,
@"juice" : @0.50}};
[managedObject hyp_fillWithDictionary:values];
NSDictionary *expenses = [NSKeyedUnarchiver unarchiveObjectWithData:managedObject.expenses];
// ==> "cake" : 12.50, "juice" : 0.50
UserManagedObject *user;
[user setValue:@"John" forKey:@"firstName"];
[user setValue:@"Hyperseed" forKey:@"lastName"];
NSDictionary *userValues = [user hyp_dictionary];
就这样,这就是您需要做的全部工作,键将自动转换为snake_case
约定。
{
"first_name": "John",
"last_name": "Hyperseed"
}
它还支持关系,并遵循Rails accepts_nested_attributes_for
规则,例如对于具有多个笔记的用户
"first_name": "John",
"last_name": "Hyperseed",
"notes_attributes": [
{
"0": {
"id": 0,
"text": "This is the text for the note A"
},
"1": {
"id": 1,
"text": "This is the text for the note B"
}
}
]
如果您不想获取嵌套关系,您可以选择忽略它们
NSDictionary *dictionary = [user hyp_dictionaryUsingRelationshipType:HYPPropertyMapperRelationshipTypeNone];
"first_name": "John",
"last_name": "Hyperseed"
或者将它们作为数组获取
NSDictionary *dictionary = [user hyp_dictionaryUsingRelationshipType:HYPPropertyMapperRelationshipTypeArray];
"first_name": "John",
"last_name": "Hyperseed",
"notes": [
{
"id": 0,
"text": "This is the text for the note A"
},
{
"id": 1,
"text": "This is the text for the note B"
}
]
NSManagedObject-HYPPropertyMapper可通过CocoaPods获取。要安装,只需将以下行添加到您的Podfile中
pod 'NSManagedObject-HYPPropertyMapper'
请查阅我们的playbook了解贡献指南。
Hyper开发了此工具。我们是一家热衷于优秀代码的数字通信公司,如果您在使用这个库,我们可能愿意雇佣您。
NSManagedObject-HYPPropertyMapper可在MIT许可下使用。有关更多信息,请参阅LICENSE文件。