2010-01-18 1 views
5

Sto cercando di cambiare un valore in un array multidimensionale, ma ottenendo un errore di compilazione:Objective-C che accede/modifica gli elementi dell'array in un array multidimensionale (NSArray)

warning: passing argument 2 of 'setValue:forKey:' makes pointer from integer without a cast 

Questa è la mia serie di contenuti:

NSArray *tableContent = [[NSArray alloc] initWithObjects: 
       [[NSArray alloc] initWithObjects:@"a",@"b",@"c",nil], 
       [[NSArray alloc] initWithObjects:@"d",@"e",@"f",nil], 
       [[NSArray alloc] initWithObjects:@"g",@"h",@"i",nil], 
       nil]; 

questo è come mi sto cercando di modificare il valore:

[[tableContent objectAtIndex:0] setValue:@"new value" forKey:1]; 

Soluzione:

[[tableContent objectAtIndex:0] setValue:@"new val" forKey:@"1"]; 

Quindi la chiave matrice è un tipo stringa - un po 'strano, ma buono a sapersi.

risposta

11
NSMutableArray *tableContent = [[NSMutableArray alloc] initWithObjects: 
        [NSMutableArray arrayWithObjects:@"a",@"b",@"c",nil], 
        [NSMutableArray arrayWithObjects:@"d",@"e",@"f",nil], 
        [NSMutableArray arrayWithObjects:@"g",@"h",@"i",nil], 
        nil]; 

[[tableContent objectAtIndex:0] replaceObjectAtIndex:1 withObject:@"new object"]; 

non desiderate per alloc+init per sub-array, poiché il conteggio di conservare i sottocampi sarà troppo elevata (+1 per la alloc, poi di nuovo +1 quanto è inserito nel esterno array).

+0

Grazie per il suggerimento. – dan

2

Stai creando matrici immutabili e cercando di modificare i valori memorizzati in esse. Utilizzare invece NSMutableArray.

+0

Non fa fare qualsiasi differenza Ancora ottenere lo stesso errore. – dan

1

Se si desidera NSMutableArray's insertObject:atIndex: o replaceObjectAtIndex:withObject: (il primo reimposta l'elemento esistente se ne esiste già uno, mentre quest'ultimo lo sostituirà ma non funziona per gli indici che non sono già occupati). Il messaggio setValue:forKey: accetta un tipo di valore per il suo primo argomento e un NSString per il suo secondo. Stai passando un intero anziché un NSString, che non è mai valido.

+0

Non c'è nessun messaggio come setObject: atIndex: ma setObject: forKey :. Ma ottengono ancora lo stesso errore. – dan

+0

Non c'è 'setObject: atIndex:' per 'NSMutableArray', invece c'è' replaceObjectAtIndex: withObject: '. http://developer.apple.com/it/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html – dreamlax

+0

Ci scusiamo, mentre corri fuori dalla porta e ho inventato un metodo. Ho corretto per spiegare i due metodi che stavo confondendo nella mia testa. – Chuck

0

Purtroppo per rispondere 1 e mezzo anni domanda: D
Ho avuto lo stesso problema, e finalmente ho risolto con il conteggio degli elementi, quindi fare addObject per spingere l'elemento dell'array