2012-08-28 12 views
7

Ich kann nicht herausfinden, was @UnionOfObjects bietet, dass eine einfache valueForKey: oder valueForKeyPath: kann nicht.Schlüssel-Wert-Codierung @UnionOfObjects

Apple docs:

@unionOfObjects Der Operator gibt ein Array die unterschiedlichen Objekte in der Eigenschaft von dem Schlüsselpfad rechts von dem Operator angegeben enthält. Im Gegensatz zu "@distinctUnionOfObjects" sind doppelte Objekte nicht entfernt. Das folgende Beispiel gibt die Empfängereigenschaftswerte für die Transaktionen in Transaktionen:

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

Der resultierende Zahlungsempfänger-Array enthält die folgenden Zeichenkette: Grüne Leistung, grüne Energie, Green Power, Autokredit, Autokredit, Autokredit, General Kabel, Allgemeine Kabel, Allgemeine Kabel, Hypothek, Hypothek, Hypothek, Tierklinik.

In dem obigen Beispiel

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

würde das gleiche Array von Werten zurückkehren, aber mit weniger Code. Was vermisse ich?

+1

Diese Funktionen von KVO bieten viel Wert, wenn Sie Bindungen unter OSX verwenden. –

Antwort

3

Alles was ich sofort denken kann ist, dass es "Array enthält ..." zurückgibt (Hervorhebung meins). So wird es für zweckmäßig sein:

NSSet *someSet = ...; 

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

Es ist daher sinnvoll, überall in Cocoa Bindungen, wo Sie wollen eine NSSet (oder andere Nicht-Array-Sammlung), um Daten in ein NSArray förmiges Loch zu schieben.

+0

Warnung für zukünftige Leser: Wenn ich das versuchte, bekam ich: ''NSInvalidArgumentException', Grund: '[<__ NSSetI 0x7ff069d02140> valueForKeyPath:]: Diese Klasse implementiert nicht die Operation unionOfObjects.' (in einem Spielplatz), so kann es nicht sicher sein, '@ unionOfObjects' auf einem NSSet überhaupt zu verwenden. –