当我使用RestKit POST一个Core Data托管对象时,RestKit不会更新现有对象,而是创建一个新对象。
返回的JSON始终包含新创建的对象,但将其包装到多个键控数组中。我发现如果我将其更改为仅一个对象,则更新按预期工作。但是,我想将数组保留在响应中,以便所有响应始终采用复数形式。
有没有什么方法可以让RestKit更新记录,即使从包含在数组中的服务器返回?
可能的解决方案:identificationAttribute
?
在我的实体上,我有identificationAttribute
名为remoteID
。这是记录的主要唯一键。在POST之前它将为0,因为该对象尚未在服务器上。我认为通过添加第二个名为insertionID
的identificationAttribute,在POST之前设置,然后在响应中返回它,将允许RK在本地存储中查找现有实体。唉,它不起作用。
然而,在POST之前将remoteID
设置为服务器上的下一个自动增量值是有效的!什么可以解释它适用于remoteID
,但不适用于第二个insertionID
?
示例请求
{
"user": {
"email": "example@example.com"
}
}
响应
{
"users": [{
"email": "example@example.com"
}]
}
答案 0 :(得分:1)
我想将数组保留在响应中,以便所有响应始终采用复数形式。
你不应该,因为这是一个单独的请求和响应,而不是一个复合。
您对identificationAttribute
的想法是正确的,但在响应是数组时不适用。数组是放弃与源对象匹配并创建新对象的触发器(或可能的触发器之一)。改变这一点很难。
在不了解您的真实情况的情况下,有两种选择:
当您使用多个标识属性时,所有标识属性都必须匹配才能找到目标对象。
注意 - 不要为具有不同标识属性的同一实体创建多个映射,否则您很可能会长时间调试查找缓存以尝试找出正在发生的事情... < / p>
如果在发出请求之前标识匹配,则数组不是问题。为了更详细地解释上述内容:
当你发布一个对象时,RestKit希望得到该对象。因此,如果你发布一个对象并获得一个数组,它就不知道该怎么做,因为它不能将一个数组映射到一个对象中。因此,它尝试基于标识属性(如果存在)进行查找。如果POSTed对象没有id并且返回的对象没有,那么它永远不会匹配。如果你在POST之前设置它,那么它将匹配。