我有两个实体,Issue
和User
,我用它来表示从服务器来到我的数据。问题和用户之间存在多对多关系,当我从服务器获得问题时,该对象具有一组用户ID。
稍后,当我从服务器获得用户时,我希望能够找到我存储的具有匹配ID的问题。
我一直计划使用可转换的属性来存储每个问题的用户ID。但是,我已经读过可转换属性不可查询。真的吗?如果是这样,我如何创建一个可查询的数组属性?
答案 0 :(得分:3)
正确的是,您无法查询存储为实体的可转换属性的数组中的条目。
一种可能的解决方案是将用户ID列表存储为Issue
实体中以逗号分隔的字符串属性,然后搜索匹配的ID,如下所述:
Form NSPredicate from string that contains id's
另一种解决方案是在阅读和创建问题时,在第一遍中创建从Issue
到User
的关系。当您从服务器获得包含用户ID列表的问题时,您将找到或创建User
个对象并设置关系。
答案 1 :(得分:0)
由于您使用的是具有多对多关系的两个实体,为什么不使用核心数据实现关系?即usersSet
实体中的Issue
(说)将是NSSet
,而issuesSet
中的User
也将是NSSet
。如果是这种情况,您可以通过以下方式实现谓词,以轻松获得您想要的内容:
(以下代码假设Issue
与User
之间的多对多关系为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
)。