0

問題の回避策はありますが、なぜこの問題が発生しているのか、そしてどのように解決するのかを本当に理解したいと思います。

別のエンティティBに関連するエンティティAがあり、Aの行の一部に1つのフィールドに特別なマークがあります。

この特別なマークが付いている、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を実行して、問題を解決しました。

4

2 に答える 2

0

NSSetを作成した後、nsset.countをチェックし、ゼロより大きい場合はNSFetchrequestを発行し、ゼロの場合は発行しません。

問題は解決しましたが、nsset.countを使用しない場合に発生する、この奇妙なエラーに対する好奇心はまだあります。

ありがとう、

于 2011-12-12T08:15:44.870 に答える
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 に答える