Core data 在CoreData内的NSArray中查询NSNumber的正确方法是什么?

Core data 在CoreData内的NSArray中查询NSNumber的正确方法是什么?,core-data,nsarray,nspredicate,nsnumber,nsfetchrequest,Core Data,Nsarray,Nspredicate,Nsnumber,Nsfetchrequest,我有一个实体,其ID类型列名为“responsibleUsers”。在本列中,我存储了一个包含NSNumbers的数组。 我想获取此实体中与当前用户匹配的所有对象。因此,我创建以下谓词: [NSPredicate predicateWithFormat: @"%@ IN responsibleUsers",[NSNumber numberWithInteger: curUser.oID.integerValue] ] 无论我尝试什么,我的应用程序都会崩溃。一次使用EXC_BAD_访问,

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

    [NSPredicate predicateWithFormat: @"%@ IN responsibleUsers",[NSNumber numberWithInteger: curUser.oID.integerValue] ]
无论我尝试什么,我的应用程序都会崩溃。一次使用EXC_BAD_访问,一次使用“未实现的谓词nsnumber SQL生成”


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

您尝试的查询假设您有两个实体:您查询的实体(我们称之为
)和另一个实体,可能称为
用户
,该实体被设置为来自
的多对多关系,称为
责任用户
。然后,您可以使用您建议的谓词:

[NSPredicate predicateWithFormat:@"%@ IN responsibleUsers, aUser]; 
建议使用核心数据对象图

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

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

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

谢谢-是的,您完全正确。在CoreData Transformable属性中存储NSArray违反了核心数据的本质。我把我的模型和代码改成了通常的关系模式,一切都很顺利。。。非常感谢。