Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios RestKit-使用不属于响应的IdentificationAttribute_Ios_Objective C_Json_Restkit - Fatal编程技术网

Ios RestKit-使用不属于响应的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”],那么如果使用设备的两个用户拥有相同的文章

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

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

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

总结事实:

  • 对于JSON请求,我不发送userId,它是 仅限服务器会话,因此我认为无法使用
    RKRoute
  • 在RestKit映射之后,我与用户手动进行文章的映射
  • 我没有userId属性作为JSON响应的一部分,它只存在于ArticleManagedObject中
有没有办法通知RestKit,在映射过程中,它应该检查
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”,以便更好地理解。多个用户可以阅读同一篇文章,一个用户可以阅读多篇文章。看看这是否有助于我更新我的问题,以便更好地解释我的问题。