2012-04-18 6 views
8

que estoy teniendo dos matrices, a sabervalor de Acceso desde el conjunto de objetos

NMutableArray* first; 
NMutableArray* second; 

Ahora estoy copiando primer objeto de la segunda matriz como

for (int i=0;i<first.count; i++) 
{ 
[second addObject:[first objectAtIndex:i]; 
} 

Esto está bien. No sé cómo acceder al valor de First Array. Intenté así,

[second addObject:[[first objectAtIndex:i]name]]; 

Quiero obtener el valor del nombre que está en el primer objeto de la primera matriz. Intenté usar la línea anterior, muestra una advertencia. Por favor me ayude a

Respuesta

7

Suponiendo que comenzó con una serie como esta:

NSArray *array1 = @[@{@name : @"Fred"}, 
        @{@name : @"Bill"}]; 

Se puede crear una segunda matriz que contiene el valor de una propiedad determinada de cada elemento de la primera matriz de la siguiente manera:

NSArray *array2 = [array1 valueForKey:@"name"]; 

Si usted luego registró el segundo arra Y ...

NSLog(@"%@", array2); 

... la salida resultante sería

2012-04-18 16:26:11.226 ExampleRunner[23320:707] (
    Fred, 
    Bill 
) 

EDITAR

Tenga en cuenta que esto funcionará independientemente de si los objetos en la primera matriz son instancias de NSDictionary como se muestra en el ejemplo anterior, o instancias de una clase o clases que tienen una propiedad name o una variable de instancia (o una variable de instancia _name, para el caso).Para obtener más información sobre cómo y por qué esto funciona, consulte la documentación para el protocolo informal NSKeyValueCoding:

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html

+0

Hola @jlehr, no estoy seguro de cuántos objetos agregaré en la Primera matriz. En ese caso, creo que el valor clave no será adecuado. Correcto ? – Perseus

+0

@ user562100 No estoy seguro de entender su pregunta. ¿Puedes por favor aclarar? – jlehr

1

respuesta Actualizado:

Una vez más, creo que debe dividir la materia hacia fácil de analizar líneas de código:

for (id theObject in first) 
{ 
    // without an actual type, I still think the compiler might 
    // throw a warning on this next line of code; 
    // but maybe RJR III is correct and it won't warn. 
    // I didn't check. 
    NSString * nameOfObject = [theObject name]; 
    if(nameOfObject) 
    { 
     [second addObject:nameOfObject]; 
    } 
} 

Aviso que yo hago alguna comprobación de errores en aquí también (es decir, asegurándose de que el nombre no sea nulo).

respuesta original:

le está dando una advertencia porque el compilador no sabe qué tipo de objeto personalizado que se han recuperado de su llamada a "[first objectAtIndex: i]". En otras palabras, no sabe qué tipo de objeto está tratando de obtener el "name" de.

Colóquelo en el tipo correcto y se deshará de la advertencia.

O mejor aún, divide esa línea de múltiples cosas que suceden a la vez en dos o tres líneas de código y haz tu código más legible en el proceso.

+0

'-objectAtIndex:' 'devuelve un id', así convertir al tipo correcto es innecesaria, incluso con la rigor de ARC. –

+0

Si intento acceder al objeto usando [second addObject: [first objectAtIndex: i]]; está funcionando. Pero quiero acceder al valor particular de en el primer objeto de la Primera matriz. – Perseus

3

Los soportes se encuentran actualmente en el lugar equivocado:

[second addObject:[[first objectAtIndex:i] name]]; 
+2

+1 a su respuesta porque no noté que los corchetes del OP en esa línea están en mal estado. Sheesh –

+0

Lamento mucho haber escrito incorrectamente esas etiquetas en la pregunta. Ahora lo he actualizado. – Perseus

+0

@ user562100 aún tiene un horquillado incorrecto en su pregunta actualizada. Veo tres caracteres "[" y solo dos caracteres "]". –

Cuestiones relacionadas