【发布时间】: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”以便更好地理解。许多用户可以阅读同一篇文章,而一个用户可以阅读多篇文章。
-
我已经更新了我的问题,以便更好地解释我遇到的问题。
标签: ios objective-c json restkit