2012-04-18 15 views
8

sto avendo due array, OvveroAccesso valore dalla matrice di oggetti

NMutableArray* first; 
NMutableArray* second; 

Ora sto copiando primo oggetto alla seconda matrice come

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

Questo è ok. Non so come accedere al valore del primo array. Ho provato in questo modo,

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

Voglio ottenere il valore del nome che si trova nel primo oggetto del primo array. Ho provato a usare la linea sopra, sta mostrando un avvertimento. Please help me

risposta

7

Dando per scontato che è iniziato con una serie come questa:

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

è possibile creare un secondo array che contiene il valore di una data proprietà di ogni elemento del primo array come segue:

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

Se si è registrato il secondo arra y ...

NSLog(@"%@", array2); 

... l'uscita risultante sarebbe

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

EDIT

noti che questo funziona indipendentemente dal fatto che gli oggetti nel primo array sono istanze di NSDictionary come illustrato nell'esempio precedente o istanze di una classe o classi che hanno una proprietà name o una variabile di istanza (o una variabile di istanza _name, per quella materia).Per ulteriori informazioni su come e perché questo funziona, consultare la documentazione per il protocollo informale NSKeyValueCoding:

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

+0

Ciao @ jlehr, non sono sicuro di quanti oggetti aggiungerò nel primo array. In tal caso, penso che il valore chiave non sia adatto. Destra ? – Perseus

+0

@ user562100 Non sono sicuro di aver capito la tua domanda. Puoi chiarire per favore? – jlehr

1

Risposta Aggiornato:

Anche in questo caso, penso che si dovrebbe dividere roba in facile da analizzare righe di codice:

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]; 
    } 
} 

noti che faccio qualche errore di check-in anche qui (cioè assicurandosi che il nome non sia nullo).

risposta originale:

stai ricevendo un avviso perché il compilatore non sa che tipo di oggetto personalizzato è essere prelevato dalla vostra chiamata a "[first objectAtIndex: i]". In altre parole, non sa quale tipo di oggetto stai cercando di ottenere "name" di.

Inseriscilo nel tipo corretto e ti libererai dell'avviso.

O ancora meglio, divisione che una linea di cose più accadendo in una sola volta in due o tre righe di codice e rendere il codice più leggibile nel processo.

+0

'-objectAtIndex:' restituisce un 'id', in modo da lanciare per il tipo corretto è necessario, anche con il rigore dell'ARC. –

+0

Se sto tentando di accedere all'oggetto utilizzando [second addObject: [first objectAtIndex: i]]; funziona. Ma voglio accedere al particolare valore di nel primo oggetto del primo array. – Perseus

3

Le staffe sono attualmente nel posto sbagliato:

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

+1 alla risposta perché non ho notato che le parentesi dell'OP su quella riga sono tutte incasinate. Sheesh –

+0

Sono davvero dispiaciuto di aver digitato erroneamente questi tag nella domanda. Ora l'ho aggiornato. – Perseus

+0

@ user562100 hai ancora il bracketing sbagliato nella tua domanda aggiornata. Vedo tre "[" caratteri e solo due "]" caratteri. –

Problemi correlati