2009-03-12 28 views

cevap

44

Öncelikle, iç dizinin dizeleri tutacak bir sınıf kullanarak veya (o dizelerden oluşan bir 2d dizi yapmak kolaydır olduğu) bir plist dosyadan yükleyerek düşünebilirsiniz.

doğrudan bildirimleri için, birkaç seçenek var. Eğer bir NSArray kullanmak isterseniz, el böyle yapısını oluşturmak gerekecek:

NSArray *strings = @[ @[ @"A", @"B", @"C" ], @[ @"D", @"E", @"F" ], @[ @"G", @"H", @"I" ] ] 
: dizi değişmezleri kullanılarak,

NSMutableArray *strings = [NSMutableArray array]; 
for(int i = 0; i < DESIRED_MAJOR_SIZE; i++) 
{ 
    [strings addObject: [NSMutableArray arrayWithObject:@"" count:DESIRED_MINOR_SIZE]]; 
} 

Veya, böyle bir değişmez sürümünü alabilirsiniz

daha sonra bu gibi kullanabilirsiniz:

NSString *s = [[strings objectAtIndex:i] objectAtIndex:j]; 

Bu başlatmak için biraz garip, ama sen NSArray yöntemlerini kullanmak istiyorsanız gitmek için bir yoldur.

NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil 

Sonra kullanmak böyle:

Alternatif C diziler kullanmaktır

NSString *s = strings[i][j]; 

Bu, daha az garip ama/ kopyalamak korumak için dikkatli olmak zorunda ve , değerlerini, bunları dizinin içine koyduktan ve dizinden kaldırdıkça serbest bırakır.

[strings[i][j] release]; 
strings[i][j] = [newString retain]; 

diğer fark size şudur: (! Tabii, ARC kullandığınız sürece) NSArray sizin için ancak C tarzı diziler bu yapardın, bir dizi yerine böyle bir şey yapmak gerekir N-C dizisine dizilemez, ancak NSArrays'i kullanamazsınız - bunun için NSNull kullanmanız gerekir. Ayrıca yığın taşması soruya NSString bellek yönetimi hakkında daha fazla bilgi için Cocoa: Memory management with NSString bakabilirsiniz. Eğer beyan ve dizeleri iki boyutlu diziyi başlatmak istiyorsanız

+2

+1. – Abizern

12

, bunu yapabilirsiniz:

NSArray *myArray = [NSArray arrayWithObjects: 
         [NSArray arrayWithObjects:@"item 1-1", @"item 1-2", nil], 
         [NSArray arrayWithObjects:@"item 2-1", @"item 2-2", nil], 
         [NSArray arrayWithObjects:@"item 3-1", @"item 3-2", nil], 
         [NSArray arrayWithObjects:@"item 4-1", @"item 4-2", nil], 
         nil]; 

Bu size bir değişmez dizi vererek yararı vardır.

+0

Merhaba Steve McLeod, myArray'ım böyle olsaydı nasıl "item 1-1" değerini alabilirim. –

+1

[[myArray objectAtIndex: 1] objectAtIndex: 1] – Hackmodford

2

Ben kendini reklam olabilir ama ben 2D dizi olarak NSMutableArray fore kolay kullanım sarmalayan yazdı. GitHub'da CRL2DArray olarak kullanılabilir. Eğer NS (Değişken) Array konuşuyorsak

+0

Android'den geliyor (Java) Çok kullanışlı bir GitHub efendim için çok teşekkür ederim. –

+0

Tek sorun şu ki, normal bir NSArray'ın saymak gibi daha yerleşik metotları olmasını isterdim. Ama şimdilik sadece manuel olarak yapacağım! –

İlgili konular