2012-03-01 5 views
0

ARC를 사용하여 사자의 nsmutable 배열, xcode 4.3에 addobjects를 추가하려고합니다. 하여 프로그램이NSMutableArray insertObject가 배열에 추가되지 않습니다.

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
[myArray insertObject:@"Hello World" AtIndex:5] 

가 어떻게 배열의 모든 인덱스에 사용자 지정 개체를 추가 할 수 있습니다 SIGABRT와 충돌을 일으키는 다음?

미리 도움을 주셔서 감사합니다.

답변

3

당신이 C 고정 크기 배열과 동일한 방식으로 NSArray를 사용하려는 경우, 당신이 배열 크기, 예를 들어, 원하는대로 많은 [NSNull null]으로 NSArray 인스턴스를 작성하여 제안 이 경우에는 10 개의 항목이 있습니다.

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
for(int i = 0; i < 10; i++) { 
    [myArray addObject:[NSNull null]]; 
} 

그리고 개체를 삽입하려면 replaceObjectAtIndex:withObject:을 대신 사용하십시오. 배열의 크기는 변경되지 않습니다.

[myArray replaceObjectAtIndex:5 withObject:@"Hello World"]; 

또한 항목에 액세스 할 때 [NSNull null]을 확인해야합니다.

id item = [myArray objectAtIndex:5]; 
if (item != [NSNull null]) { 
    NSString* stringItem = item; 
    // your code here 
} 
+0

감사합니다. :-) – inforeqd

4

배열가 10 용량, 배열 크기 동안이 범위를 벗어 때문에 당신이 인덱스 5에 요소를 삽입 할 수 있도록 창조가 0 직후.

또한, 배열로 nil를 삽입 할 수 없습니다,하지만 당신은 자리로 (10 개) 전무 요소와 배열을 갖고 싶어, 당신은 NSNull 사용할 수 있습니다 : 당신이 요소의 수정 번호가있는 경우

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
for (int i = 0; i < 10; i++) { 
    [myArray addObject:[NSNull null]]; 
} 

// then this would work, but it inserts a new element, so your array size will be 11 
// [myArray insertObject:@"Hello World" atIndex:5] 
// to keep array size at 10 use this method: 
[myArray replaceObjectAtIndex:5 withObject:@"Hello World"]; 
1

을 배열에서 다음 NSArray를 사용하십시오. 그러면 특정 위치에 대한 객체를 설정할 수 있습니다. NSMutableArray를 사용할 때 그 크기는 0입니다. NSMutableArray의 5 번째 위치에 삽입 할 최소 5 개의 요소가 있어야합니다.

0

빈 배열에 객체를 삽입하려고합니다. 작동하지 않습니다. 대신 객체를 추가하십시오. 이 시도 ...

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
[myArray addObject:@"Hello World"]; 
관련 문제