NSManagedObject-HYPPropertyMapper 4.1.4

NSManagedObject-HYPPropertyMapper 4.1.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016年10月
SPM支持 SPM

Christoffer WinterkvistElvis Nuñez维护。



用 JSON 填充 NSManagedObject

将您的 Core Data 对象映射到您的 JSON 提供的后端从未如此简单。

CamelCase 格式的 JSON

{
  "firstName": "John",
  "lastName": "Hyperseed"
}
NSDictionary *values = [JSON valueForKey:@"user"];
[user hyp_fillWithDictionary:values];

您的 Core Data 实体应该与后端模型匹配。您的属性应该与其 JSON 对应属性匹配。例如,firstName 映射到 firstNameaddressaddress

这个规则有两个例外

  • id 应该匹配 remoteID
  • 保留属性应该以 entityName (例如 type 变成 userTypedescription 变成 userDescription 等) 为前缀。在 JSON 中它们不需要改变,例如您可以保留 typedescription。保留属性的全列表可以在 这里找到。

Snake_case 格式的 JSON

{
  "first_name": "John",
  "last_name": "Hyperseed"
}
NSDictionary *values = [JSON valueForKey:@"user"];
[user hyp_fillWithDictionary:values];

您的 Core Data 实体应该与后端模型匹配,但是以 camelCase 格式。您的属性应该与其 JSON 对应属性匹配。例如,first_name 映射到 firstNameaddressaddress

这个规则有两个例外

  • id 应该匹配 remoteID
  • 保留属性应该以 entityName (例如 type 变成 userTypedescription 变成 userDescription 等) 为前缀。在 JSON 中它们不需要改变,例如您可以保留 typedescription。保留属性的全列表可以在 这里找到。

自定义

如果您想映射 Core Data 属性和具有不同命名的 JSON 属性,您可以通过在用户信息框中添加 hyper.remoteKey 并输入您要映射的值来实现。

Remote mapping documentation

属性类型

为了映射数组和字典,只需在 Core Data 模型器上将属性设置为 Binary Data 即可。

screen shot 2015-04-02 at 11 10 11 pm

日期

我们默认支持 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

transformable-attribute

您可以在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

从NSManagedObject的JSON表示

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文件。