Iphone NSPredicate中的NSSet,仅当我首先发出NSSet.count时有效

Iphone NSPredicate中的NSSet,仅当我首先发出NSSet.count时有效,iphone,core-data,nspredicate,nsset,Iphone,Core Data,Nspredicate,Nsset,我有一个解决我的问题的方法,但我真的想知道为什么我会有这个问题以及如何解决它 我有一个实体A与另一个实体B相关,A的一些行在一个字段中有一个特殊标记 我想数一数有多少与B相关的A,有这个特殊的标记 如果在我创建NSSet后,我对该集合进行计数,则所有操作都会完美完成: NSSet *productsSet = currentList.ingredients; int countProducts = productsSet.count; NSPredicate *predicate = [NS

我有一个解决我的问题的方法,但我真的想知道为什么我会有这个问题以及如何解决它

我有一个实体A与另一个实体B相关,A的一些行在一个字段中有一个特殊标记

我想数一数有多少与B相关的A,有这个特殊的标记

如果在我创建NSSet后,我对该集合进行计数,则所有操作都会完美完成:

NSSet *productsSet = currentList.ingredients;

int countProducts = productsSet.count;

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"self IN %@ AND isInList = %d", productsSet,1];

[fetchRequest setPredicate:predicate];

int totalProductsInList = [context countForFetchRequest:fetchRequest error:error];
如果我评论 int countProducts=productsSet.count; 我有这些错误:

-[NSNull unsignedIntValue]: unrecognized selector sent to instance 0x22b9cd8
2011-12-05 12:10:41.418 xxxxxxxxxx[32964:1bb03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[NSNull unsignedIntValue]: unrecognized selector sent to instance 0x22b9cd8'
isInList是一个Int16

谢谢

编辑: 如果我在NSPredicate中移动1而不进行计数,则会出现相同的错误:

[NSPredicate predicateWithFormat: @"self IN %@ AND isInList = 1", productsSet;
编辑2:
由于我找不到它不起作用的原因,我检查productsSet.count,如果它大于0,我发出NSFetchrequest,问题就解决了。

好的,在创建NSSet之后,我检查NSSet.count,如果它大于零,我发出NSFetchrequest,如果它为零,就不要

问题解决了,但我仍然好奇这个奇怪的错误,如果我不使用nsset.count


谢谢,

关系返回的NSSet对象不是普通的NSSet,而是\n NSFaultingMutableSet类的对象。在NSPredicate中使用它似乎不安全。可能是它变成了故障状态或什么的。问题的原因与中的相同

因此,最好的方法是使用AllObject的结果或创建新的NSSet对象:

NSArray*productsArray=[currentList.allObjects]


NSSet*productsSet=[NSSet-setWithSet:currentList.components]

这个错误快把我逼疯了。。。unsignedIntValue指向NSPredicate上的1?如果我像这样将1放在NSPredicte中,错误是相同的:[NSPredicate Predicate-WithFormat:@“self IN%@AND isInList=1”,productsSet];对我来说,同样的问题似乎是一个核心数据错误。我没有要检查的设备,所以我不能做同样的事情。寻找更好的解决方案…很高兴我不是唯一一个这样做的人:-)如果你找到了解决方案,请在这里发布。谢谢