2012-08-28 9 views
7

No puedo entender lo que @UnionOfObjects ofrece que un simple valueForKey: o valueForKeyPath: no puede hacer.Codificación de valor-clave @UnionOfObjects

Apple docs:

El operador @unionOfObjects devuelve una matriz que contiene los distintos objetos en la propiedad especificada por la ruta de la clave a la derecha del operador . A diferencia de "@distinctUnionOfObjects", los objetos duplicados no están eliminados . El ejemplo siguiente devuelve los valores de propiedad del beneficiario para las transacciones en las transacciones:

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

La matriz beneficiarios resultante contiene las siguientes cadenas: Verde de energía, la energía verde, energía verde, préstamo de coche, préstamo de coche, préstamo de coche, General Cable, General Cable, General Cable, Hipoteca, Hipoteca, Hipoteca, Hospital de animales.

En el ejemplo anterior,

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

devolvería la misma matriz de valores, pero con menos código. ¿Qué me estoy perdiendo?

+1

Estas características de KVO proporcionan mucho valor cuando usa enlaces en OSX. –

Respuesta

3

Todo lo que puedo pensar de inmediato es que "devuelve una matriz que contiene ..." (énfasis mío). Por lo que será conveniente para:

NSSet *someSet = ...; 

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

Por lo tanto es útil en cualquier lugar de los enlaces de cacao en las que desea una NSSet (u otra colección no es un array) para enviar datos en un agujero en forma de NSArray.

+0

Advertencia para futuros lectores: cuando probé esto, obtuve: ''NSInvalidArgumentException', razón: '[<__ NSSetI 0x7ff069d02140> valueForKeyPath:]: esta clase no implementa la operación unionOfObjects. (En un patio de juegos), por lo que puede no se puede usar '@ unionOfObjects' en un NSSet en absoluto. –