2010-04-07 22 views
8

aFloatArray [] [] ilkel biçiminde yuva dizileri olmadan iki boyutlu NSArray oluşturmanın bir yolu var mı?Çok boyutlu NSArray nesnesi

Teşekkür ederiz.

+3

Neyi başarmanız gerekiyor? Belki de çözdüğünüz problem için daha uygun başka yaklaşımlar olabilir. – jlehr

cevap

17

Ne yazık ki değil. Çok boyutlu NSArray oluşturmak için: (o C sıkı bir üst olduğundan)

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

Ancak, vardı gibi diziyi olduğuna dair karar sizin ihtiyaçlarınız varsa, Objective-C C kodu kullanabilirsiniz önerdi.

+6

Çöp toplama kullanmıyorsanız, dizinin her birini "multiArray" içinde sızdırıyorsunuz demektir. Düzeltmek için, '[NSMutableArray array]' yerine kullanın. –

+0

Gerçekten mi? [NSMutableArray dizisi], otomatik olarak yüklenen NSMutableArray öğesinin döndürülmesi anlamındaydı; Kesinlikle bakacağım, çünkü eğer doğruysa, lol – FatalMojo

+1

Evet'e geçmek için çok fazla kod var. Bunun anlamı, otomatik olarak yüklenen nesnenin _is_ eklendiği dizi tarafından tutulmasıdır. Ebeveyn dizisi serbest bırakıldığında, içeriği de öyle. Bir diziye '[NSMutableArray new]' eklerseniz, tutma sayısı "2" olur. Ebeveyn dizisi serbest bırakıldığında, çocuklarının her birinin hala 1 numaralı bir tutma sayısı vardır. –

10

Bunu yapabilirsin:

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

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

ben bu "objectAtIndex" şeyler çok daha kısa olduğunu düşünüyorum.

ama kullanmak zorunda dikkat Elma LLVM Derleyici sürüm> = 4.0

+0

Bu kesinlikle modern bir yaklaşımdır. –

0

Toplama veya TableView cellForRowAtIndexPath içinde Boyutlu dizide bir nesne eklemek için:

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

Koleksiyonu'nda Boyutlu diziden bir nesneyi almak için veya TableView cellForRowAtIndexPath:

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