2010-01-18 8 views
5

Estoy tratando de cambiar un valor en una matriz multidimensional, pero conseguir un error del compilador:Objective-C Acceso/cambio de elementos de la matriz en una matriz multidimensional (NSArray)

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

Ésta es mi arsenal contenido:

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

Esta es la forma en que estoy tratando de cambiar el valor:

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

Solución:

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

Así que la clave de la matriz es un tipo de cadena - un poco extraño, pero bueno saber.

Respuesta

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

Usted no quieren alloc+init para las sub-series porque el recuento de retener a una de las sub-arrays será demasiado alto (1 para el alloc, entonces +1 nuevo, ya que se inserta en el exterior formación).

+0

Gracias por la pista. – dan

2

Está creando matrices inmutables y está tratando de cambiar los valores almacenados en ellas. Use NSMutableArray en su lugar.

+0

No hace hacer alguna diferencia Todavía obtengo el mismo error. – dan

1

Desea NSMutableArray insertObject:atIndex: o replaceObjectAtIndex:withObject: (la primera empujará el elemento existente hacia atrás si ya existe uno, mientras que el último lo reemplazará, pero no funciona para los índices que no están ocupados). El mensaje setValue:forKey: toma un tipo de valor para su primer argumento y un NSString para su segundo. Está pasando un entero en lugar de un NSString, que nunca es válido.

+0

No hay ningún mensaje como setObject: atIndex: pero setObject: forKey :. Pero aun así obtienes el mismo error. – dan

+0

No hay 'setObject: atIndex:' para 'NSMutableArray', en su lugar hay' replaceObjectAtIndex: withObject: '. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html – dreamlax

+0

Disculpas, publicado al salir corriendo e inventado un método. He corregido para explicar los dos métodos que estaba confundiendo en mi cabeza. – Chuck

0

Lo siento por responder 1 y medio años de edad pregunta: D
que tiene el mismo problema, y ​​al final lo resolví con el recuento de los elementos, y luego hacer addObject para empujar al elemento de la matriz

Cuestiones relacionadas