2010-04-26 3 views
1

버튼을 누를 때 집계에서 1을 계산하는 간단한 방법을 만들려고합니다. 내 지식은 매우 제한적이며, 나는 내 문제는 메소드 구현 어딘가에 것을 확신 : 나는 lblTally UILabel의와 updateTally 방법에 필요한 인터페이스 선언을했을간단한 iPhone 집계 방법 질문

-(IBAction) updateTally:(id) sender { 
    NSString *text; 
    int total = 0; 
    total = total + 1; 
    text=[[NSString alloc] initWithFormat: @"%i", total]; 
    lblTally.text = text; 
} 

. 내가 만들고있는 NSString/int/% i/% @ mixup이 있다고 생각하지만 어떻게 수정해야할지 모르겠다. 현재 프로그램을 실행할 때 아이폰의 lblTally 레이블 필드에 0이 표시됩니다. 버튼을 누르면 해당 필드에 1이 표시됩니다. 그러나 버튼을 계속 누르면 아무 일도 일어나지 않습니다. 버튼을 계속 누르고 있으면 어떻게 카운트 업합니까?

답변

2

문제는 각 updateTally에서 총계를 다시 초기화한다는 것입니다. 탈리를 멤버 변수에 저장하거나 문자열에서 기존 탈리를 추출하고 업데이트 한 다음 다시 문자열에 기록해야합니다.

 
- (IBAction) updateTally:(id) sender 
{ 
    int oldtally = [lblTally.text integerValue]; 
    int newtally = oldtally + 1; 
    lblTally.text = [NSString stringWithFormat:"%d",newtally]; 
} 

나는 또한 현재 코드는 메모리 누수가 (당신이 ALLOC/초기화를 호출,하지만 당신은 lblTally.text 변수에 결과를 할당 한 후 다음 릴리스를 호출하지 않음)이 있음을 지적한다. lblTally.text = text 다음에 [text release]를 호출해야합니다. 또는 위에서 사용 된 것처럼 stringWithFormat을 사용해야합니다. 자동 해제되기 때문에 문자열을 명시 적으로 해제 할 필요가 없도록 autorelease를 사용합니다.

+0

이 작품은 도움을 주셔서 대단히 감사합니다. 불행히도, 나는 왜 그것이 작동하는지 이해하지 못합니다. 왜 첫 번째 라인은 단순히 "int oldtally = lblTally.text"로 작동하지 않습니까? – startuprob

+0

"int oldtally = lblTally.text"가 작동하지 않는 이유는 lblTally.text가 문자열이기 때문입니다. 문자열로 표현 된 정수를보고하는 "integerValue"메서드를 호출하여 정수로 변환해야합니다 (문자열이 실제로 정수를 나타내는 것으로 가정 할 경우 오류가 발생 함). –

1

메서드가 실행될 때마다 총 변수가 다시 초기화됩니다.

int total = 0; 

코드 외부의 코드보다는 방법으로 이동하십시오. 나는 사과 개발을하지는 않지만 다음과 같이 될 것입니다 :

int total = 0; 
-(IBAction) updateTally:(id) sender { 
    NSString *text; 
    total = total + 1; 
    text=[[NSString alloc] initWithFormat: @"%i", total]; 
    lblTally.text = text; 
} 
+0

@geoff, 합계는 해당 클래스의 구성원이어야합니다. 전역 변수가 아닙니다. –

+0

@Michael - 당신 말이 맞아요.하지만 요점은 선언문이 그의 방법 밖에 있어야한다는 것입니다 ... 저는 제 대답을 편집했습니다. –