2009-07-31 3 views
4

(私のカスタム)GTPersonオブジェクトを含むNSDictionaryがあります。 GTPersonにはNSMutableSet *parentsという属性があり、その上に@property@synthesizeを使用しています。私のNSDictionaryの不足NSPredicatesでキーパスを使用する

、私はすべての親を持たないすべてのGTPersonオブジェクトをフィルタリングする、すなわち両親のカウントが0に

ここで私は、次のコードを使用しています:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parents.count = 0"]; 
NSArray *np = [[people allValues] filteredArrayUsingPredicate:predicate]; 

私はこれを実行すると、私は次のエラーが表示されます

[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'

は、なぜそれがそのparents attriにGTPersonにcountを呼び出そうとしていませんブート?

答えて

15

@"[email protected] == 0"のように、@countという演算子を使用して問題を解決してください。

例外を読むと、メッセージ-countをGTPersonオブジェクトに送信した述部を評価することがわかります。どうして?

コレクション(あなたのケースでは、キーパスのparentsコンポーネントを評価した結果のNSSetです)は、-valueForKey:をコレクションの各オブジェクトに送信します。

この場合、-valueForKey: @"count"が各GTPersonインスタンスに送信され、GTPersonはカウントに対応するキー値コーディングではありません。

代わりに、@count演算子を使用して、コレクション内のすべてのオブジェクトのキーの値ではなく、コレクションの数を計算するときに、コレクションの数を評価します。

関連する問題