2010-04-07 15 views
8

¿Hay alguna manera de crear NSArray bidimensional sin matrices de anidación en el formato primitivo aFloatArray [] [].objeto NSArray multidimensional

Gracias.

+3

¿Qué es lo que necesita lograr? Tal vez haya otros enfoques aún más adecuados para el problema que está resolviendo. – jlehr

Respuesta

17

Desafortunadamente no. Para crear un NSArray multidimensional:

NSArray *multiArray = [NSArray arrayWithObjects: 
    [NSMutableArray array], 
    [NSMutableArray array], 
    [NSMutableArray array], 
    [NSMutableArray array], nil]; 

// Add a value 
[[multiArray objectAtIndex:1] addObject:@"foo"]; 

// get the value 
NSString *value = [[multiArray objectAtIndex:1] objectAtIndex:0]; 

Sin embargo, puede utilizar el código C en Objective-C (ya que es un superconjunto estricto de C), si se ajusta a su necesidad se podría declarar la matriz, como lo hizo sugirió.

+6

Si no está utilizando la recolección de basura, está filtrando cada una de las matrices dentro de 'multiArray'. Para solucionarlo, use '[NSMutableArray array]' en su lugar. –

+0

¿De verdad? Tenía entendido que [NSMutableArray array] devolvió un NSMutableArray liberado automáticamente, que a su vez sería retenido por el NSArray al que se está agregando. Definitivamente lo buscaré porque si estás en lo cierto, tengo un montón de código para pasar por lol – FatalMojo

+1

Sí. El punto es que el objeto de autorregresión _es_ retenido por la matriz a la que se agrega. Cuando se lanza la matriz principal, también lo hace su contenido. Si agrega '[NSMutableArray new]' a una matriz, su retención se convierte en '2'. Cuando se lanza la matriz principal, cada uno de sus hijos todavía tiene un conteo de retención de '1'. –

10

Usted puede hacer esto:

NSArray *array = @[@[@"0:0", @"0:1"], 
        @[@"1:0", @"1:1"]]; 

NSString *value = array[1][0]; 

creo que esto es mucho más corta que la materia "objectAtIndex".

pero ojo que tiene utilizar la versión de Apple LLVM compilador> = 4.0

+0

Este es definitivamente el enfoque moderno. –

0

Para insertar un objeto en Conjunto multidimensional en la colección o TableView cellForRowAtIndexPath:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];     
[dictionary setValue:[UIImage imageWithData:imageData] forKey:sectionRow]; 

para recuperar un objeto de la matriz multidimensional en la colección o TableView cellForRowAtIndexPath:

NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];  
UIImage *cellImage = [dictionary valueForKey:sectionRow]; 
Cuestiones relacionadas