0

我有一个实体,其 ID 类型列名为“responsibleUsers”。在本专栏中,我存储了一个包含 NSNumber 的数组。我想获取与我当前用户匹配的该实体的所有对象。因此我创建了以下谓词:

    [NSPredicate predicateWithFormat: @"%@ IN responsibleUsers",[NSNumber numberWithInteger: curUser.oID.integerValue] ]

无论我尝试什么,我的应用程序都会崩溃。一次使用 EXC_BAD_ACESS,一次使用“未实现的 SQL 生成谓词 nsnumber”

查询我的实体的正确方法是什么?

4

1 回答 1

1

您正在尝试的查询假定您有两个实体:您查询的实体(我们称它为Group)和另一个实体,可能为 called ,它被设置为来自calledUser的一对多关系。然后,您将能够使用您建议的谓词:GroupresponsibleUsers

[NSPredicate predicateWithFormat:@"%@ IN responsibleUsers, aUser]; 

这将是 Core Data 对象图的推荐使用。

在您的设置中,您似乎有一个NSNumber集合数组作为属性而不是关系。因此,您不能使用这样的查询。您只需检索数组并查询数组。

BOOL containsResponsibleUser = NO;
for (NSNumber *n in aGroup.responsibleUsers) {
    if ([n isEqualTo:[NSNumber numberWithInteger: curUser.oID.integerValue]]) 
       containsResponsibleUser = YES;
}

如果您确实在查询一组用户,我会推荐第一种方法。如果您正在查询某种用户,我建议将BOOL属性responsible作为最有效的解决方案。

于 2012-04-28T16:52:29.897 回答