2009-11-10 4 views
0
data = [[NSMutableArray arrayWithCapacity:numISF]init]; 
count = 0; 
while (count <= numISF) 
{ 
    [data addObject:[[rouge_col_data alloc]init]]; 
    count++; 
} 

I의 while 루프 단계별 데이터 어레이 내의 각 객체- NSMutableArray의 에러하면

루즈 COL 데이터의 구현은 다음과 같다 "범위 밖"이다 ..

@implementation rouge_col_data 
@synthesize pos; 
@synthesize state; 
-(id) init { 
    self = [super init];  
    return self; 
} 
@end 

대부분의 자습서 이러한 종류의 배열에있는 객체에 대해서만 NSString을 사용할 수 있습니다.

고마워요 알렉스 E

EDIT

data = [[[NSMutableArray alloc] initWithCapacity:numISF]retain]; 
//data = [[NSMutableArray arrayWithCapacity:numISF] retain]; 
count = 0; 
while (count < numISF) 
{ 

    [data addObject:[[[rouge_col_data alloc]init]autorelease]]; 

    count++; 

} 

여전히 같은 오류는 "데이터 = '전환하더라도.

+0

이 문제를 해결하는 더 좋은 방법이 있습니까? – DevEarley

답변

3
  1. 당신은 당신의 arrayWithCapacity:의 결과에 init를 호출 할 필요는 없다 요구. arrayWithCapacity:은 초기화 된 (그러나 자동으로 릴리즈 된) 객체를 반환합니다. 또는 [[NSMutableArray alloc] initWithCapacity:]으로 전화 할 수도 있습니다.
  2. 루프에 오류가 하나 있습니다. 당신은 0에서 시작하고 있으므로 여분의 물체를 추가 할 것입니다. 이 여분의 객체를 추가하는 것은 성공할 것입니다 - 당신이하려는 것처럼 보이지 않습니다.
  3. 배열에 추가 할 개체가 autorelease 일 수 있습니다. 배열은 그 자체로 배열을 유지합니다. 객체 자체를 유지해야 할 필요가 있다면 괜찮습니다.하지만 어레이가 여러분을 대신하여 보존하도록하는 것이 일반적입니다.
  4. 배열 자체는 retain이어야하며, 그렇지 않으면 이벤트 루프가 끝날 때 사라집니다.
2

내가 코드에서 발견 할 수있는 유일한 오류는 NSArray 초기화입니다.

당신이 할 경우 : 당신이 일을해야

data = [[NSMutableArray arrayWithCapacity:numISF] init]; 

: arrayWithCapacity이 공장 방법, 그리고 당신에게 오토 릴리즈 인스턴스를 반환하기 때문에

data = [NSMutableArray arrayWithCapacity:numISF]; 

이입니다. 이 방법 후 개체를 계속 사용하려면, 당신은 그것을 retain해야합니다, 당신은 모양을 수 :

data = [[NSMutableArray arrayWithCapacity:numISF] retain]; 
+0

배열을 유지해야하는지 여부는 메서드가 완료된 후에 배열을 유지해야하는지 여부에 따라 다릅니다. – Chuck

+0

예, 경우에 따라 답변을 업데이트하겠습니다. – pgb

관련 문제