iOS RestKit 实体管理器映射对象数组
Posted
技术标签:
【中文标题】iOS RestKit 实体管理器映射对象数组【英文标题】:iOS RestKit Entity Manager mapping Array of Objects 【发布时间】:2013-11-04 10:36:00 【问题描述】:我在将对象数组映射到核心数据条目时遇到了一个奇怪的问题。
用户实体映射和objectManager代码:
RKEntityMapping *objectMapping = [RKEntityMapping mappingForEntityForName:@"User" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];
[objectMapping addAttributeMappingsFromDictionary:@@"id": @"user_id",
@"first_name": @"first_name",
@"middle_name":@"middle_name",
@"last_name":@"last_name",
@"phone":@"phone",
@"job_title":@"job_title",
@"roles":@"roles",
@"email":@"email",
@"created_at":@"created_at",
@"updated_at":@"updated_at",
@"avatar_urls":@"avatar_urls",
@"skills":@"skills",
@"interests":@"interests",
@"birth_date":@"birth_date"];
RKEntityMapping *userMapping = [User entityMapping];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:@"users/:id"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:userMapping
method:RKRequestMethodGET
pathPattern:@"users"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
这是一个简单的用户实体数组示例。
User1,
User2,
User3
查看来自 RestKit 的调试日志,所有内容都映射到正确的值。但是当我查看最终结果时,映射数组具有正确数量的项目,但它们都是 User3。同样,数据库也有 User3。 User1 和 User2 永远不会存储在数据库中。
我一直在试图找出我哪里出错了。任何帮助表示赞赏。
更新:
[manager getObjectsAtPath:@"users"
parameters:@@"token":token
success:success failure:failure];
[
"avatar_urls":
"large": "",
"medium": "",
"small": "",
"thumb": "",
"icon": ""
,
"id": 631,
"roles": [
"company_admin"
],
"created_at": "2013-10-23T15:59:06.256-05:00",
"updated_at": "2013-10-27T16:51:31.947-05:00",
"skills": [],
"interests": [],
"birth_date": null,
"phone_message_channel": true,
"email_message_channel": true,
"first_name": "User",
"last_name": "One",
"email": "",
"phone": null,
"job_title": null
,
"avatar_urls":
"large": "",
"medium": "",
"small": "",
"thumb": "",
"icon": ""
,
"id": 633,
"roles": [
"company_admin"
],
"created_at": "2013-10-23T16:07:46.472-05:00",
"updated_at": "2013-10-27T16:51:26.148-05:00",
"skills": [],
"interests": [],
"birth_date": null,
"phone_message_channel": true,
"email_message_channel": true,
"first_name": "User",
"last_name": "two",
"email": "",
"phone": "",
"job_title": ""
,
"avatar_urls":
"large": "",
"medium": "",
"small": "",
"thumb": "",
"icon": ""
,
"id": 632,
"roles": [
"company_admin"
],
"created_at": "2013-10-23T16:07:12.295-05:00",
"updated_at": "2013-11-01T20:11:26.607-05:00",
"skills": [],
"interests": [],
"birth_date": "",
"phone_message_channel": true,
"email_message_channel": true,
"first_name": "User",
"last_name": "Three",
"email": "",
"phone": "",
"job_title": ""
]
重申成功块映射结果显示数组中有3个项目,都是User 3。我还检查了核心数据并确认它只为User模型添加/更新了一行。
修复 自己没有积分来发布答案..所以添加为更新
我忘记为我的用户模型添加标识属性。一旦我将其设置为我的 ID,一切都会像魅力一样发挥作用..... =.= 剥夺睡眠是不好的......
【问题讨论】:
展示一些真实的 JSON 以及你是如何发出请求的。 【参考方案1】:在上面的代码中,您设置了一个名为 objectMapping 的 RKEntityMapping
。然后你设置另一个名为 userMapping 的RKEntityMapping
。您不再引用objMapping。
您发布的代码中缺少某些内容,或者从未使用过 objectMapping,并且您没有为您的请求设置映射。
【讨论】:
你是对的,我只是输入所有相关信息而不是整个代码。但是我确实找到了解决方法.....我忘记为我的用户模型设置 IdentificationAttributes ......这就是我前一天晚上不睡觉的结果...... 根据您使用的 RestKit 版本应该自动设置它,但设置 IdentificationAttributes 总是一个好主意 我正在使用提供的最新款 cocoapods,你是对的,安全总比后悔好。我在一行代码上浪费了很多时间 =/以上是关于iOS RestKit 实体管理器映射对象数组的主要内容,如果未能解决你的问题,请参考以下文章