如何使用可查询的数组属性创建核心数据条目?

时间:2013-03-11 11:47:41

标签: ios core-data

我有两个实体,IssueUser,我用它来表示从服务器来到我的数据。问题和用户之间存在多对多关系,当我从服务器获得问题时,该对象具有一组用户ID。

稍后,当我从服务器获得用户时,我希望能够找到我存储的具有匹配ID的问题。

我一直计划使用可转换的属性来存储每个问题的用户ID。但是,我已经读过可转换属性不可查询。真的吗?如果是这样,我如何创建一个可查询的数组属性?

2 个答案:

答案 0 :(得分:3)

正确的是,您无法查询存储为实体的可转换属性的数组中的条目。

一种可能的解决方案是将用户ID列表存储为Issue实体中以逗号分隔的字符串属性,然后搜索匹配的ID,如下所述: Form NSPredicate from string that contains id's

另一种解决方案是在阅读和创建问题时,在第一遍中创建从IssueUser的关系。当您从服务器获得包含用户ID列表的问题时,您将找到或创建User个对象并设置关系。

答案 1 :(得分:0)

由于您使用的是具有多对多关系的两个实体,为什么不使用核心数据实现关系?即usersSet实体中的Issue(说)将是NSSet,而issuesSet中的User也将是NSSet。如果是这种情况,您可以通过以下方式实现谓词,以轻松获得您想要的内容:

(以下代码假设IssueUser之间的多对多关系为usersSet。)

User *userObjFromServer = <your user object from server>... 
NSString *userId = userObjFromServer.userId; //Whichever way you are doing this
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY usersSet.userId like %@",userId]; 

您正在谈论的可查询数组将是关系(仅限于NSSet)。