2012-08-28 10 views
7

Non riesco a capire cosa @UnionOfObjects offra un valore valueForKey: o valueForKeyPath: non può fare.Codifica valori-chiave @UnionOfObjects

Apple docs:

L'operatore @unionOfObjects restituisce una matrice contenente le distinte oggetti nella struttura specificata dal percorso chiave a destra dell'operatore . A differenza di "@distinctUnionOfObjects", gli oggetti duplicati non vengono rimossi . L'esempio seguente restituisce i valori delle proprietà beneficiario per le operazioni nelle transazioni:

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

La matrice beneficiari risultante contiene le seguenti stringhe: Verdi di potenza, Green Power, Green Power, prestito auto, prestito auto, prestito auto, Generale Cable, General Cable, General Cable, Mortgage, Mortgage, Mortgage, Animal Hospital.

Nell'esempio precedente,

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

restituirebbe la stessa matrice di valori, ma con meno codice. Cosa mi manca?

+1

Queste funzionalità di KVO forniscono molto valore quando si utilizzano i collegamenti su OSX. –

risposta

3

Tutto ciò a cui riesco a pensare immediatamente è che "restituisce un array contenente ..." (enfasi il mio). Così sarà conveniente per:

NSSet *someSet = ...; 

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

E 'quindi molto utile in Cocoa attacchi in cui si desidera una (o da un'altra raccolta non-array) NSSet per spingere i dati in un foro sagomato NSArray.

+0

Avviso per i futuri lettori: quando ho provato questo, ho ricevuto: ''NSInvalidArgumentException', motivo: '[<__ NSSetI 0x7ff069d02140> valueForKeyPath:]: questa classe non implementa l'operazione unionOfObjects. (In un parco giochi), quindi potrebbe non è sicuro usare '@ unionOfObjects' su un NSSet. –