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

Posted

技术标签:

【中文标题】当响应包含在数组中时,RestKit POSTed 托管对象变得重复【英文标题】:RestKit POSTed managed object becomes duplicate when response is enveloped in an array 【发布时间】:2014-07-07 20:14:02 【问题描述】:

当我使用 RestKit 发布 Core Data 托管对象时,RestKit 不会更新现有对象,而是创建一个新对象。

返回的 JSON 始终包含新创建的对象,但会将其包装成复数键控数组。我发现如果我将其更改为仅一个对象,则更新将按预期进行。但是,我想将数组保留在响应中,以便所有响应始终采用复数形式。

有什么方法可以让 RestKit 更新记录,即使是从包装在数组中的服务器返回?

可能的解决方案:identificationAttribute?

在我的实体上,我有一个名为 remoteIDidentificationAttribute。这是记录的主唯一键。这将在 POST 之前为 0,因为该对象尚未在服务器上。我认为通过添加第二个名为insertionID 的标识属性,在 POST 之前设置它,然后在响应中返回它,将允许 RK 在本地存储中找到现有实体。唉,没用。

但是起作用的是,在 POST 之前将 remoteID 设置为服务器上的下一个自动增量值!什么可以解释它适用于remoteID,但不适用于第二个insertionID

示例请求


    "user": 
        "email": "example@example.com"
    

回应


    "users": [
        "email": "example@example.com"
    ]

【问题讨论】:

【参考方案1】:

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

您不应该这样做,因为这是单独的请求和响应,而不是组合。

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

在不了解您的实际情况的情况下,2 个替代方案:

    更改 JSON 发布一个字典而不是真实的对象,然后你就不会有重复了

当您使用多个标识属性时,必须全部匹配才能找到目标对象。

注意 - 不要为具有不同标识属性的同一实体创建多个映射,否则您很可能会长时间调试查找缓存以试图弄清楚发生了什么......

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

当您发布一个对象时,RestKit 期望取回该对象。因此,如果您发布一个对象并返回一个数组,它不知道该怎么做,因为它无法将数组映射到一个对象。因此,它会尝试根据标识属性(如果存在)进行查找。如果 POSTed 对象没有 id 而返回的对象有,那么它将永远不会匹配。如果您在 POST 之前设置它,那么它将匹配。

【讨论】:

它可以丢弃数组,但是我需要创建额外的响应描述符。如果我想发布多个对象怎么办?当然我需要一个数组响应。当响应是数组时,RK 不使用标识属性从 Core Data 存储中获取现有实体,我觉得很奇怪。如果我还发布了一个数组,它会改变吗?我先有这个,但也没有用。 我不记得发布数组是否检查数组响应内容。如果您发布了多个对象,我通常希望收到返回的状态/ID 响应列表,而不是必然收到完整的对象。请记住,RestKit 试图迎合“规范”,您可以找到它不做的事情。你可以分叉它并建议更改(在 github 上)。 嗨,Wain,我在关于identificationAttribute 的问题中添加了一些新信息。您能否解释一下这种意外行为? 啊,所以一个额外的属性不起作用,因为 all 属性必须匹配。谢谢! 哦,天哪,我感觉前面有很多麻烦......在解决了这个问题之后,更多的问题出现了,RK 没有映射到现有的 CoreData 实体。我有三层关系嵌套,我只想发布前两层。结果:RestKit 成功映射到第一层实体,第二层实体被复制,第三层实体被孤立。有什么办法可以让它与 RK 一起工作,或者这不是要走的路?

以上是关于当响应包含在数组中时,RestKit POSTed 托管对象变得重复的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 仅保存响应数组中的最后一项

Restkit 映射列表 - 没有响应描述符与加载的响应匹配

restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)

RestKit嵌套的一对多关系映射很慢

当数组在对象变量中时访问单个数组索引

Android - MPAndroidChart 中的拖动在 ScrollView 中时无响应