2011-02-24 3 views
2

개체를이 NSArray (labelArray)에 추가하려고하지만 어떤 이유로 NSLog에 (null)으로 반환 될 때마다 0으로 유지됩니다.이 NSArray가 작동하지 않는 이유는 무엇입니까?

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
label.text = @"text"; 
[self.view addSubview:label]; 
[labelArray addObject:label]; 
NSLog(@"%@", labelArray); 
[label release]; 
+1

'NSMutableArray * labelArray'를'초기화 '하는 코드를 표시 할 수 있습니까? – Richard

+0

xcode 관련 없음 태그 [xcode]의 사용을 확인하십시오 : http://stackoverflow.com/tags/xcode/info – vikingosegundo

답변

12

NSArray은 변경할 수 없습니다. -addObject:으로 전화하려면 NSMutableArray을 사용하십시오. labelArrayNSArray 인 경우 충돌이 발생합니다. 크래시가 발생하지 않으면 nil 일 것이며 초기화하지 않은 것입니다.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
label.text = @"text"; 
[self.view addSubview:label]; 

if (labelArray == nil) { 
    labelArray = [[NSMutableArray alloc] init]; 
} 

[labelArray addObject:label]; 
NSLog(@"%@", labelArray); 
[label release]; 
2

배열의 데이터를 변경하려면 NSMutableArray를 사용해야합니다. NSArray는 정적 배열을 만드는 데에만 사용할 수 있습니다.

0

당신은 아마도있는 NSArray는 'addObjext'에 응답하지 않을 수 없다는 컴파일러에서 메시지가 나타납니다 일 일부 코드입니다. 이것은 당신이 사용하는 객체가 요청 된 선택자 (메소드)를 수행하지 않는다는 것을 당신의 단서입니다. 이 경우 변경할 수없는 개체를 변경하려고합니다. 작동하지 않습니다. NSMutableArray를 사용해야합니다. 나는 당신이 애플의 문서에서 차이점을 읽을 것을 제안한다.

0

다음 코드를 테스트했습니다. lable이 추가 된 후 개수는 1입니다.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
    label.text = @"text"; 
    [self.view addSubview:label]; 

    NSArray *labelArray = [NSArray arrayWithObject:label]; 
    NSLog(@"Count: %d", labelArray.count); 
관련 문제