当响应被包含在数组中时,RestKit POSTed托管对象变为重复

时间:2014-07-07 20:14:03

标签: ios json core-data restkit

当我使用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"
    }]
}

1 个答案:

答案 0 :(得分:1)

  

我想将数组保留在响应中,以便所有响应始终采用复数形式。

你不应该,因为这是一个单独的请求和响应,而不是一个复合。

您对identificationAttribute的想法是正确的,但在响应是数组时不适用。数组是放弃与源对象匹配并创建新对象的触发器(或可能的触发器之一)。改变这一点很难。

在不了解您的真实情况的情况下,有两种选择:

  1. 更改JSON
  2. 发布字典而不是真实对象,然后您不会重复

  3. 当您使用多个标识属性时,所有标识属性都必须匹配才能找到目标对象。

    注意 - 不要为具有不同标识属性的同一实体创建多个映射,否则您很可能会长时间调试查找缓存以尝试找出正在发生的事情... < / p>

    如果在发出请求之前标识匹配,则数组不是问题。为了更详细地解释上述内容:

    当你发布一个对象时,RestKit希望得到该对象。因此,如果你发布一个对象并获得一个数组,它就不知道该怎么做,因为它不能将一个数组映射到一个对象中。因此,它尝试基于标识属性(如果存在)进行查找。如果POSTed对象没有id并且返回的对象没有,那么它永远不会匹配。如果你在POST之前设置它,那么它将匹配。

相关问题