Ios RestKit-使用不属于响应的IdentificationAttribute
在RestKit中,是否可以使用实际上不属于JSON响应的IdentificationAttribute 我的情况如下-我有一个服务,列出了当前登录用户的所有文章,如Ios RestKit-使用不属于响应的IdentificationAttribute,ios,objective-c,json,restkit,Ios,Objective C,Json,Restkit,在RestKit中,是否可以使用实际上不属于JSON响应的IdentificationAttribute 我的情况如下-我有一个服务,列出了当前登录用户的所有文章,如http://example.com/json/articles.json 我的问题如下-由于应用程序允许多个用户登录,因此我将文章与每篇文章的用户ID一起保存在数据库中。如果我设置了articleMapping.identificationattributes=@[“articleId”],那么如果使用设备的两个用户拥有相同的文章
http://example.com/json/articles.json
我的问题如下-由于应用程序允许多个用户登录,因此我将文章与每篇文章的用户ID一起保存在数据库中。如果我设置了articleMapping.identificationattributes=@[“articleId”]
,那么如果使用设备的两个用户拥有相同的文章,则会出现问题-无论用户ID如何,都会覆盖该文章,因为它不是响应的一部分
总结事实:
- 对于JSON请求,我不发送userId,它是
仅限服务器会话,因此我认为无法使用
RKRoute
- 在RestKit映射之后,我与用户手动进行文章的映射
- 我没有userId属性作为JSON响应的一部分,它只存在于ArticleManagedObject中
articleId+userId
组合作为标识符?我尝试使用identificationPredicate,但没有成功
编辑:
UserA登录时服务器的响应示例:
{
"data":{
"articles":[
{
"articleId":1,
"title":"Objective C Basics"
},
{
"articleId":2,
"title":"Xcode Basics"
}
]
}
}
{
"data":{
"articles":[
{
"articleId":1,
"title":"Objective C Basics"
},
{
"articleId":3,
"title":"Java Basics"
}
]
}
}
下面是UserB登录时的响应:
{
"data":{
"articles":[
{
"articleId":1,
"title":"Objective C Basics"
},
{
"articleId":2,
"title":"Xcode Basics"
}
]
}
}
{
"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的对象article 1和UserB的对象article 1之间进行分离。您目前在RestKit外部进行用户到文章的映射,这很好,但您需要稍微修改此过程 首先,我假设这里的文章响应是用户的完整文章集。如果没有,那么事情会变得更加棘手,您需要修改以下内容以考虑: 首先获取用户的所有现有文章。有了这些,我们将看到哪些需要删除,哪些需要添加 当我们反复阅读我们收到的文章时,我们可以检查现有的文章是否匹配,如果我们找到一篇我们没有工作要做的文章。如果找不到匹配项,则需要将关系添加到现有集合,该集合将是与任何其他用户具有任何关系的联合
接下来,我们要从现有文章列表中删除新文章列表,以获得删除列表,对于这些,我们只需断开链接,再次保持其他用户不变。每个用户(具有相同id)的文章是否相同?您可以使用多对多关系吗?用户文章关系是多对多关系,但服务仅返回当前会话用户的文章。我的用户和文章之间的关系可以命名为“isReading”,以便更好地理解。多个用户可以阅读同一篇文章,一个用户可以阅读多篇文章。看看这是否有助于我更新我的问题,以便更好地解释我的问题。