2012-06-07 2 views
2

내비게이션보기 iPhone 앱이 있습니다. 나는 'name'NSString과 'weight'NSNumber를 가진 간단한 객체를 만들었다. 이 응용 프로그램은 셀을로드 할 때 충돌을 계속합니다. 좀비가 아니어야하는 좀비 오브젝트

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Configure the cell... 
factor *toAdd = [factors objectAtIndex:indexPath.row]; 

cell.textLabel.text = toAdd.name; 
cell.detailTextLabel.text = [toAdd.weight stringValue]; 
    //^crashes here... 
    // stringByAppendingString:@"%"]; 

return cell; 
} 

내가의 NSNumber에 stringValue 메소드를 호출 할 때 콘솔에서 "할당이 해제 된 인스턴스에 보낸 메시지"를 얻을 : 여기에 방법이다. 나는 이것이 왜 일어나고 있는지 이해하지 못한다. 위의 줄은 이름에 액세스하는 데 아무런 문제가 없으며 [릴리스] 문이 없습니다.

당신에게

편집 감사합니다 가 여기 내 요소의 초기화 방법입니다. 나는 이중 체크를하고 무게는 (유지, 비 원자)이며, 구현과 마찬가지로 이름과 같다. 성공적으로 name 속성에 액세스 할 수 있다는

- (id) init{ 
if(self = [super init]) 
{ 
    weight = [NSNumber numberWithInt:10]; 
    name = @"Homework"; 
} 
return self; 
} 
+0

'// stringByAppendingString : @ "%"]; '? – Joe

+0

당신은 당신의 방법 목욕 소금을 먹이고 있습니까? –

+0

무게는 백분율 값이므로 내 문자열의 끝에 '%'기호가 있어야합니다. 나는 [NSNumber stringValue] 문제를 먼저 해결하기 위해 주석 처리했다. 그런 다음 주석을 제거하겠다. – gamda

답변

1

init에서 속성 설정 메소드를 사용하지 않습니다. 따라서 객체는 유지되지 않습니다.

이 시도 :

- (id) init{ 
if(self = [super init]) 
{ 
    self.weight = [NSNumber numberWithInt:10]; 
    self.name = @"Homework"; 
} 
return self; 
} 

는 이러한 종류의 오류를 방지하기 위해 당신이 속성을 합성 할 수있다 : 주석의 목적은 무엇

@synthesize name = _name; 
+0

유일한 것은 자기가 아닌 _weight이어야한다는 것이다. 당신은 init 메소드에서 접근자를 사용하지 말아야한다. 내가 틀리면 않는 한? 확실히 –

+0

자체 작업을 사용할 수 있습니다. 하나의 질문이지만, @ synthesize name과 @ synthesize name = _name의 차이점은 무엇입니까? 다른 이름을주는 것은 무엇을합니까? 고맙습니다. – gamda

+0

이름 대신 ivar _name에 이름을 지정하고 이름을'name = @ "Homework"'으로 설정하려고하면 컴파일러에서 오류가 발생합니다. 자세한 내용은 다음을 참조하십시오. http://weblog.bignerdranch.com/463-a-motivation-for-ivar-decorations/ – Felix

0

weight 속성이 아직 발표 여부와는 아무 상관이있다. 모두 당신에게 당신의 factor이 살아 있고 잘 있으며 그 name도 살아 있고 잘 있다는 것입니다. factor 구현에서 귀하의 weight 속성을 올바르게 유지하지 못하고있는 것 같습니다.

편집 : 추가 된 코드로는 입니다. 현재 수행중인 작업은입니다.

+0

나는 factor init 메소드를 게시했는데 어디서나 어떤 선언문도 가지고 있지 않다. 또한 가중치는 이름과 마찬가지로 @property (유지, 비 원자)입니다. – gamda

+0

@gamda,'[NSNumber numberWithInt : 10]'은 자동 회수 된 객체를 반환합니다. 당신은 그것을 소유하지 않으며 그것을 보유하지 않으면 매우 빨리 풀릴 것입니다. 그 아이 바르에 대해 선언 된 프로퍼티를 가지고 있다면, 대신에'self.weight = [NSNumber numberWithInt : 10]'을 사용하십시오. –

+0

알겠습니까? weight = [autoreleased]는 값을 유지하지 않고 자동 갱신 된 객체에 대한 포인터 일뿐입니다. self.weight = [autoreleased]하는 것은 내가 객체를 잃지 않도록 retain을 의미합니까? 오, 그게 효과가있어, 고마워. – gamda