RestKit映射非托管对象

时间:2014-01-26 15:02:35

标签: ios restkit nsmanagedobject restkit-0.20

我使用的是最新的Restkit 0.20.3

目前,我正在创建我的托管映射:

RKEntityMapping *messagesAddedMapping = [RKEntityMapping mappingForEntityForName:@"Message" inManagedObjectStore:[RKObjectManager sharedManager].managedObjectStore];

但是,如果我想创建一个不将此实体保存到核心数据的映射呢?

如果我这样做:

RKEntityMapping *messagesAddedMapping = [RKEntityMapping mappingForClass:[Message class]];

我收到错误:

  

'NSInternalInconsistencyException',原因:'您必须提供managedObjectStore。调用mappingForClass:inManagedObjectStore:而不是。'

我需要一种方法来进行API调用以获取数据,然后执行映射,在成功模块中,我必须手动执行一些操作并手动将实体保存到核心数据。

我的问题是我有一个Message实体,我通常只是在新消息到达时添加消息,但我将使用的新API有3个属性:messagesToAdd [消息数组],messagIdsToRemove [string array],messagesModified [message array]。

所以,我正在创建一个新对象MessagePayload,它有两个关系:messagesAddedMessage)和messagesModifiedMessage)并且还有messageIdsToDeletetransformable)。

对于MessagePayload,我不希望存储任何内容。在成功块中,我只想添加新消息,更新修改后的消息以及从删除列表中删除。

1 个答案:

答案 0 :(得分:1)

您不能拥有创建托管对象的映射,但不能将其保存到上下文中。您可以自由编辑返回的对象,然后根据需要从成功块中重新保存。

如果由于某种原因这不是一个选项,您可以创建到自定义对象或字典的映射,然后转换为托管对象并保存自己。

如果您选择使用字典,则可以使用KVC方法setValuesForKeysWithDictionary:轻松更新您的托管对象。


从下面的评论中,退一步思考一下:

  1. 我是否需要一次性收集所有这些数据(我可以使用多个响应描述符)吗?
  2. 我是否设置了我的唯一标识符,以便RestKit可以自动为我更新?
  3. 是否所有内容都需要进入Core Data?
  4. 虽然我不知道您的唯一标识符(您应该设置它们),但您可以使用2或3个响应描述符来映射此内容。 RestKit可以自动将新的和更新的对象直接处理到上下文中。对于您的删除,将这些删除映射到自定义对象或NSMutableArray,然后从成功块中删除对象。