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