2010-04-07 2 views
8

원시 형식 인 aFloatArray [] []로 배열을 중첩하지 않고 2 차원 NSArray를 만드는 방법이 있습니까?다차원 NSArray 객체

감사합니다.

+3

수행해야하는 작업은 무엇입니까? 아마도 당신이 해결하고있는 문제에 더 적합한 다른 접근법이있을 수 있습니다. – jlehr

답변

17

불행히도. 다차원있는 NSArray를 만들려면 : (이것은 C의 엄격한 상위 집합이기 때문에)

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

을하지만, 당신은 당신이 한대로 배열을 선언 할 수는 당신의 필요에 맞는 경우, 목표 - C에서 C 코드를 사용할 수 있습니다 제안했다.

+6

가비지 콜렉션을 사용하지 않는다면 각 배열을'multiArray'에 유출하게됩니다. 수정하려면 대신 [NSMutableArray array]를 사용하십시오. –

+0

정말요? [NSMutableArray array]가 autoreleased NSMutableArray를 반환했다는 것을 이해했습니다. NSMutableArray는 추가되는 NSArray에 의해 유지됩니다. 당신이 옳다면 나는 롤을 통과하는 코드가 많기 때문에 definatly 그것을 볼 것입니다 – FatalMojo

+1

예. 요점은 autoreleased 객체 _is_에 추가 된 배열에 의해 유지된다는 것입니다. 부모 배열이 해제되면 해당 내용도 해제됩니다. 배열에'[NSMutableArray new]'를 추가하면 retain-count는'2'가됩니다. 부모 배열이 해제 될 때 각 자식 요소의 보유 수는 여전히 '1'입니다. –

10

이 작업을 수행 할 수 있습니다

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

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

나는이 "objectAtIndex"물건보다 훨씬 짧은 생각합니다.

하지만 사용이 조심 애플 LLVM 컴파일러 버전> = 4.0

+0

이것은 분명히 현대적인 접근법입니다. –

0

컬렉션 또는의 TableView cellForRowAtIndexPath에서 다차원 배열에서 개체 삽입하려면 :

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

이 컬렉션에서 다차원 배열에서 개체를 검색하려면 또는 TableView cellForRowAtIndexPath :

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