RestKit - 使用不属于响应的identificationAttributes

时间:2014-11-20 09:29:30

标签: ios objective-c json restkit

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

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

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

总结事实:

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

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

修改

当UserA登录时服务器的示例响应:

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

以下是UserB登录时的响应:

{  
   "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之间进行分离。

1 个答案:

答案 0 :(得分:0)

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

首先,我假设文章响应是用户的完整文章集。如果没有,那么事情会变得更加棘手,你需要修改下面的内容:

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

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

接下来,我们要从现有文章列表中删除新文章列表以获取删除列表,因为我们只需要打破链接,再次让其他用户保持不变。