我使用的是最新的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
,它有两个关系:messagesAdded
(Message
)和messagesModified
(Message
)并且还有messageIdsToDelete
(transformable
)。
对于MessagePayload
,我不希望存储任何内容。在成功块中,我只想添加新消息,更新修改后的消息以及从删除列表中删除。
答案 0 :(得分:1)
您不能拥有创建托管对象的映射,但不能将其保存到上下文中。您可以自由编辑返回的对象,然后根据需要从成功块中重新保存。
如果由于某种原因这不是一个选项,您可以创建到自定义对象或字典的映射,然后转换为托管对象并保存自己。
如果您选择使用字典,则可以使用KVC方法setValuesForKeysWithDictionary:
轻松更新您的托管对象。
从下面的评论中,退一步思考一下:
虽然我不知道您的唯一标识符(您应该设置它们),但您可以使用2或3个响应描述符来映射此内容。 RestKit可以自动将新的和更新的对象直接处理到上下文中。对于您的删除,将这些删除映射到自定义对象或NSMutableArray
,然后从成功块中删除对象。