2012-08-28 10 views
7

単純なvalueForKey:またはvalueForKeyPath:が行うことができない@UnionOfObjectsが提供するものを理解できません。Key-Valueコーディング@UnionOfObjects

Apple docs:

@unionOfObjectsオペレータは 演算子の右側のキー・パスで指定されたプロパティに異なる オブジェクトを含む配列を返します。 "@distinctUnionOfObjects"とは異なり、重複するオブジェクトは削除されません。 次の例では、取引における 取引について受取人のプロパティ値を返します。

NSArray *payees = [transactions valueForKeyPath:@"@unionOfObjects.payee"]; 

結果の受取人の配列は以下の文字列が含まれていますグリーン 電力、グリーンパワー、グリーン電力、自動車ローン、自動車ローン、自動車ローン、一般 ケーブル、一般ケーブル、一般ケーブル、住宅ローン、住宅ローン、住宅ローン、 動物病院。上記の例で

NSArray *payees = [transactions valueForKey:@"payee"]; 

は同じ値の配列を返すが、より少ないコードであろう。私は何が欠けていますか?

+1

これらのKVOの機能は、OSXでバインディングを使用するときに大きな価値があります。 –

答えて

3

私がすぐに考えることができるのは、 "配列を含む..."(強調するマイン)を返すことです。だから、それはのために便利になるだろう:

NSSet *someSet = ...; 

NSArray *result = [someSet valueForKey:@"@unionOfObjects.whatever"]; 

それはNSArray形の穴にデータをプッシュするためにどこでもあなたがNSSet(または他の非配列コレクションを)したいCocoaバインディングに有用です。

+0

将来の読者のための警告:私はこれを試してみたとき、 "NSInvalidArgumentException"、理由: '[<__ NSSetI 0x7ff069d02140> valueForKeyPath:]:このクラスはunionOfObjects操作を実装していません。 NSSetで '@ unionOfObjects'を使うのは安全ではありません。 –