2014-01-26 133 views
0

我使用的是最新的Restkit 0.20.3RestKit映射非托管对象

目前,我创建像这样我的管理映射:

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

但是,如果我想创造一个映射,它不保存这个实体是什么核心数据?

如果我做的:

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

我得到一个错误:

'NSInternalInconsistencyException', reason: 'You must provide a managedObjectStore. Invoke mappingForClass:inManagedObjectStore: instead.'

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

我的问题是,我有一个Message实体,我通常只是添加消息,新邮件到达,但新的API,我将要消耗有3个属性:messagesToAdd [消息数组],messagIdsToRemove [字符串数组] ,messagesModified [消息数组]。

所以,我创建一个新的对象MessagePayload其中有2个关系:messagesAddedMessage)和messagesModifiedMessage),也有messageIdsToDeletetransformable)。对于MessagePayload,我不希望它存储任何它。在成功块中,我只想添加新消息,更新修改的消息,并从删除列表中删除。

回答

1

您无法创建一个托管对象但不将其保存到上下文中的映射。如果需要,您可以自由编辑返回的对象,然后从成功块中重新保存。

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

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


从下面的评论,退一步想想一点:

  1. 我需要收集所有这些数据在1个去(我可以用多个响应描述符)?
  2. 我有我的唯一标识符设置,所以RestKit可以自动更新我吗?
  3. 一切都需要进入核心数据?

虽然我不知道您的唯一标识符(您应该让它们设置),但您可以使用2或3个响应描述符来映射此内容。 RestKit可以自动处理新的和更新的对象直接进入上下文。对于您的删除,将它们映射到自定义对象或NSMutableArray,然后从成功块中删除对象。

+0

我的问题是,我有一个消息实体,我通常只是添加消息,因为新消息到达,但我将要消费的新API有3个属性:messagesToAdd [消息数组],messagIdsToRemove [字符串数组], messagesModified [消息数组]。所以我创建了一个新的对象MessagePayload,它具有2个关系:messagesAdded(Message)和messagesModified(Message),还有messageIdsToDelete(Transformable)。 – Jesse

+0

而对于messagePayload,我不希望其中存储任何内容。在成功块中,我只想添加新消息,更新修改的消息,并从删除列表中删除。 – Jesse

+0

实际上是Wain,在输入我上面的评论之后,我想了一下,我认为如果messagesAdded和messagesModified像你说的那样映射为新的子响应描述符,那么它将处理添加/删除以及删除我可以只需在成功块中完成。谢谢!我认为这会工作得很好,而且更容易! – Jesse