2012-09-16 2 views
0

내 앱에서 버튼을 누르면 UITableView의 모델 인 NSMutableArray에 문자열이 추가됩니다.NSMutableArray에 객체를 처음으로 추가하면

2012-09-16 21:33:08.766 iUni[3066:c07] Array count: 1 //Which is fine since it worked 
2012-09-16 21:33:08.952 iUni[3066:c07] Array count: 1 //Now count should be 2!! 

사람이 일어나는 이유에 대한 추측이 있습니다

- (void)addPressed:(id)sender 
{ 
    NSString *string = @"aString"; 
    [self.array addObject:string]; 
    NSLog(@"Array count: %d",[self.array count]); 
    [self.tableView reloadData]; 
} 

문제는 추가가 내가이 출력을 얻을이 작업에 연결된 두 번 버튼을 누를 경우에만 처음 작동입니까?

는 그것을 합성 및 지연이 이런 식으로 instatiated 상기 @property 추가 :

배열은 각 직후 파괴되는 것을 의미 소유되지 않은 (오토 릴리즈 실제로) 개체로 만들어지는
- (NSMutableArray *)array 
{ 
    if (!_array) { 
     NSMutableArray *array = [NSMutableArray array]; 
     _array = array; 
    } 
    return _array; 
} 
+2

배열의 실제 내용은 무엇입니까? 배열이 어떻게 선언되고 시작됩니까? 'self.array'를'count' 속성 대신에 직접 기록해야합니다. – AliSoftware

+1

1 분 또는 2 분 동안이 질문을 주연 시켰지만 Xcode와의 관계가 여전히 보이지 않았습니다 ... –

+0

첫 번째 추가 배열의 순간에 아무 것도 없습니다. 나는 그것을 재산으로 선언했다, 그리고 나는 그것을 합성하고 나서 나는 그것의 getter에서 그것을 instatiated하게된다. – BigLex

답변

3

접근자가 호출 된 시간. 다음 번에 액세스 할 때 다시 만들어지기 때문에 새로운 빈 배열이 생깁니다. 또한 ARC를 켤 수

if (!_array) { 
    _array = [[NSMutableArray alloc] init]; 
    // Note no need to create a temp variable. 
} 
return _array; 

, 당신이 알아서하고 어쨌든 좋은 생각했을 것이다 :

당신은 당신의 인스턴스 변수에 저장하는 배열의 소유 버전을 작성해야 .

+0

btw, [[... alloc] init] 대신 [NSMutableArray new]'할 수 있습니다. – Cfr

+0

맞습니다! 고마워요! 나는 이것에 미쳤어지고 있었다! – BigLex

관련 문제