0

我有一个解决我的问题的方法,但我真的很想了解我为什么会遇到这个问题以及如何解决它。

我有一个实体 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

谢谢,

编辑:

如果我将 1 移到 NSPredicate 中,但没有计数,我会得到同样的错误:

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

编辑2:

因为我找不到它为什么不起作用,所以我检查 productsSet.count,如果它大于 0,我发出 NSFetchrequest,问题就解决了。

4

2 回答 2

0

关系返回的 NSSet 对象不是普通的 NSSet,而是 _NSFaultingMutableSet 类的对象。而且似乎在 NSPredicate 中使用它并不安全。可能会变成故障状态或其他什么。问题的原因看起来与Core Data/NSOperation 中的相同:在枚举和删除对象时崩溃

所以最好的方法是使用 allObjects 的结果或者创建一个新的 NSSet 对象:

NSArray *productsArray = [currentList.ingredients allObjects];

或者

NSSet *productsSet = [NSSet setWithSet:currentList.ingredients];

于 2014-09-05T16:30:39.030 回答
0

Well, after creating the NSSet I check for nsset.count, and in case it's greater than zero I issue the NSFetchrequest, in case it's zero, don't.

Problem solved, but I still have the curiosity for this strange error that I have if I don't use the nsset.count.

thanks,

于 2011-12-12T08:15:44.870 回答