2012-04-02 21 views
7

I declaró un objeto NSArray en el archivo .h comoCómo usar NSArray del objeto NSArray en el objetivo c?

@property (nonatomic, assign) NSArray *scnArray; 

y en el archivo .h bajo - (void)viewDidLoad he creado tres diferentes objetos como NSArray

NSArray *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil]; 
NSArray *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil]; 
NSArray *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil]; 

scnArray = [[NSArray alloc] initWithArray:obj1]; 
[scnArray arrayByAddingObjectsFromArray:obj2]; 
[scnArray arrayByAddingObjectsFromArray:obj3]; 

y si puedo acceder a este scnArray de cualquier otra función

NSArray *caseArray = [scnArray objectAtIndex:index]; // índice será 0, 1, 2 ...

Estoy recibiendo BAD_ACCESS_ERROR. ¿Cuál es el problema aquí y cómo puedo corregir para usarlo?

+0

Está agregando los Objetos de 'obj2' y' obj3' a 'scnArray' pero NO está obteniendo (o almacenando en ninguna parte) matriz resultante de la fusión de las matrices ... Eche un vistazo a mi respuesta ... –

+0

Su propiedad también debe ser "fuerte" o "retener", no asignar. –

+0

Gracias Mike, cambiar la propiedad como fuerte funciona muy bien. Gracias a todos por sus entradas. – user1306926

Respuesta

5

Prueba esto:

NSArray *obj1 = [[NSArray alloc] initWithObjects:@"1",@"0",@"0",nil]; 
NSArray *obj2 = [[NSArray alloc] initWithObjects:@"0",@"3",@"0",nil]; 
NSArray *obj3 = [[NSArray alloc] initWithObjects:@"0",@"0",@"5",nil]; 

scnArray = [[NSArray alloc] initWithArray:obj1]; 
scnArray = [scnArray arrayByAddingObjectsFromArray:obj2]; 
scnArray = [scnArray arrayByAddingObjectsFromArray:obj3]; 

La función arrayByAddingObjectsFromArray: agrega todos los objetos de la matriz B a la matriz A, y devolver el resultado (= la matriz que contiene los dos elementos de A y B de).

lo tanto, debe simplemente obtener ese resultado ... :-)

IMPORTANTE:scnArray debe ser una matriz NSMutableArray, y no un NSArray (que está cambiando, ¿verdad?); así que asegúrese de editar esa parte también ...

TAMBIÉN:NSArray *caseArray = [scnArray objectAtIndex:index]; - esto no tiene ningún sentido. Establecer una matriz a un ELEMENTO del scnArray? No contiene matrices, ¿verdad? Simplemente contiene ELEMENTOS de esas matrices (las que hemos agregado) ...

2

arrayByAddingObject: no agrega el nuevo objeto al receptor, crea una matriz completamente nueva y la devuelve. Usted debe usar algo como:

scnArray = [[NSArray alloc] initWithObjects: obj1, obj2, obj3, nil]; 

No se olvide que si usted no está utilizando ARC o GC, todas estas matrices tendrán que ser lanzado en algún momento.

+0

Lo usé antes. Pero accedo a esto como NSArray * caseArray = [scnArray objectAtIndex: 1]; Sigo recibiendo el error EXE_BAD_ACCESS. – user1306926