【问题标题】:RestKit - use identificationAttributes that are not part of the responseRestKit - 使用不属于响应的标识属性
【发布时间】:2014-11-20 09:29:29
【问题描述】:

在 RestKit 中是否可以使用实际上不属于 JSON 响应的标识属性?

我的情况如下 - 我有一项服务列出当前登录用户的所有文章,例如 http://example.com/json/articles.json

我的问题如下 - 由于应用程序允许多个用户登录,我将文章与每篇文章的 userId 一起保存在数据库中。如果我设置了articleMapping.identificationattributes = @["articleId"],那么如果使用该设备的两个用户拥有相同的文章,我就会遇到问题 - 无论用户 ID 是什么,它都会被覆盖,因为它不是响应的一部分。

总结事实:

  • 对于 JSON 请求,我不发送 userId,它是 仅服务器会话,所以我认为我不能使用RKRoute
  • 我在 RestKit 映射后手动与用户进行文章的映射。
  • 我没有将 userId 属性作为 JSON 响应的一部分,它仅存在于 ArticleManagedObject 中。

有没有办法通知 RestKit 在映射过程中,它应该检查 articleId+userId 组合作为标识符?我尝试使用 IdentificationPredicate 没有成功。

编辑:

来自服务器的示例响应,当用户 A 登录时:

{  
   "data":{  
      "articles":[  
         {  
            "articleId":1,
            "title":"Objective C Basics"
         },
         {  
            "articleId":2,
            "title":"Xcode Basics"
         }
      ]
   }
}

这是用户B登录时的响应:

{  
   "data":{  
      "articles":[  
         {  
            "articleId":1,
            "title":"Objective C Basics"
         },
         {  
            "articleId":3,
            "title":"Java Basics"
         }
      ]
   }
}

如果 UserA 登录,一切正常。但是如果UserB从同一个设备登录,那么文章1会映射到UserB,从现在开始,UserA和文章1之间的连接就断开了。

从您的建议中了解到,唯一的解决方案是从服务中返回用户 ID,设置 RKUnionAssignmentPolicy 并让 RestKit 负责映射(目前我在 RestKit 之后手动进行文章和用户之间的映射)。

我的另一个问题 - 是否可以设置 IdentificationAttributes 或 IdentificationPredicate 以便区分 UserA 的对象文章 1 和 UserB 的对象文章 1。

【问题讨论】:

  • 每个用户(相同id)的文章是否相同?可以只使用一对多关系吗?
  • 用户-文章关系是多对多的,但服务只返回当前会话用户的文章。我的用户和文章之间的关系可以命名为“isReading”以便更好地理解。许多用户可以阅读同一篇文章,而一个用户可以阅读多篇文章。
  • 看看stackoverflow.com/questions/20162007/…看看有没有帮助
  • 我已经更新了我的问题,以便更好地解释我遇到的问题。

标签: ios objective-c json restkit


【解决方案1】:

您目前在 RestKit 之外进行用户到文章的映射,这很好,但您需要稍微修改此过程。

首先,我在这里假设文章响应是用户的完整文章集。如果不是,那么事情会变得更加棘手,您需要修改以下内容:

首先获取用户的所有现有文章。有了这个,我们将看看需要删除哪些内容以及需要添加哪些内容。

当我们遍历我们收到的文章时,我们可以检查现有文章是否匹配,如果我们找到了,我们就没有工作要做。如果找不到匹配项,我们需要将关系添加到现有集合中,这将是与任何其他用户的任何关系的联合。

接下来我们要从现有文章列表中删除新文章列表以获得删除列表,对于这些我们只需要断开链接,再次保持其他用户不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2012-01-01
    • 2017-06-10
    相关资源
    最近更新 更多