2010-04-07 9 views
8

Có cách nào để tạo hai chiều NSArray không có mảng lồng trong định dạng nguyên thủy aFloatArray [] [].Đối tượng đa chiều NSArray

Cảm ơn bạn.

+3

Bạn cần đạt được điều gì? Có lẽ có những cách tiếp cận khác thậm chí còn phù hợp hơn với vấn đề bạn đang giải quyết. – jlehr

Trả lời

17

Thật không may là không. Để tạo một NSArray đa chiều:

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

Tuy nhiên, bạn có thể sử dụng mã C trong Objective-C (vì nó là một superset nghiêm ngặt của C), nếu nó phù hợp với nhu cầu của bạn, bạn có thể khai báo mảng như bạn có đề nghị.

+6

Nếu bạn không sử dụng bộ sưu tập rác, thì bạn sẽ rò rỉ từng mảng trong 'multiArray'. Để khắc phục, sử dụng '[NSMutableArray array]' để thay thế. –

+0

Thật sao? Đó là sự hiểu biết của tôi rằng [mảng NSMutableArray] đã trả về một NSMutableArray tự động phát hành, do đó sẽ được giữ lại bởi NSArray mà nó đang được thêm vào! Tôi chắc chắn sẽ xem xét điều đó bởi vì nếu bạn chính xác, tôi có nhiều mã để đi qua lol – FatalMojo

+1

Có. Vấn đề là đối tượng autoreleased _is_ được giữ lại bởi mảng mà nó được thêm vào. Khi mảng cha được giải phóng, nội dung của nó cũng sẽ được phát hành. Nếu bạn thêm '[NSMutableArray new]' vào một mảng, thì số giữ lại của nó sẽ là '2'. Khi mảng cha được giải phóng, mỗi phần tử con của nó vẫn có số đếm '1'. –

10

Bạn có thể làm điều này:

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

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

tôi nghĩ rằng đây là ngắn hơn nhiều so với những thứ "objectAtIndex".

nhưng hãy cẩn thận bạn có sử dụng Apple LLVM Compiler phiên bản> = 4.0

+0

Đây chắc chắn là cách tiếp cận hiện đại. –

0

Để chèn một đối tượng trong mảng đa chiều trong Bộ sưu tập hoặc TableView cellForRowAtIndexPath:

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

Để lấy một đối tượng từ mảng đa chiều trong Bộ sưu tập hoặc TableView cellForRowAtIndexPath:

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