2012-02-22 1 views
0

방금 ​​스탠포드 iOS5 클래스를 시작하고 RPN 계산기를 완료했지만 "지우기"버튼을 약간 다르게 만들고 싶습니다. 이것은 내가 CalculatorModel "두뇌"을 변경하지, 지금이 방법은 다음과 같습니다CS193P 과제 1 클리어

- (IBAction)clearPressed 
{ 
    self.display.text = @"";      // Clear the display 
    self.historyWindow.text = @"";     // Clear the history window 
    self.model = nil;        // Reset the stack 
    self.userIsInMiddleOfEnteringNumber = NO;  // Reset user typing boolean 
} 

내가 틀렸을 수도 있지만, "self.model = 전무;" 실제로 스택에서 객체를 제거하지 않는 것처럼 보입니다. 그냥 모방 한 것입니다.

-(void) clearOperandStack 
{ 
    [self.operandStack removeAllObjects]; 
} 

을하고 CalculatorViewController 내 "clearPressed"함수를 호출 할하지만 난 아직 완전히 객관적인 C를 이해하지 않기 때문에 나는 아마도 문제가 있어요 : 그래서 CalculatorModel "두뇌"에 기능을 추가했다. 이것은 내가해야 할 일이라고 생각했지만, 일을하고 싶지는 않습니다.

- (IBAction)clearPressed 
{ 
    self.display.text = @"";      // Clear the display 
    self.historyWindow.text = @"";     // Clear the history window 
// self.model = nil;        // Reset the stack 
    [self.model clearOperandStack]; 
    self.userIsInMiddleOfEnteringNumber = NO;  // Reset user typing boolean 
} 

누군가가 그 방법을 호출하는 적절한 방법/내가 잘못하고있는 것을 설명 할 수 있습니까? 과제 1의

+0

선언문을 두뇌의 .h 파일에도 추가 했습니까? – rooftop

+0

_ 작업하고 싶지 않습니다 .- 컴파일 오류가 발생합니까? 런타임 오류? 그것은 무엇을합니까? 너는 무엇을 기대 했는가? – sarnold

+0

옥상, 네가 옳았다. .h 파일에 선언을 추가하지 않았습니다. 만약 당신이 그것을 구현 파일에 추가하고 그것이 개인적인 기능으로 간주되는 인터페이스가 아닌 것 같아요? 도와 주셔서 감사합니다! – Joey

답변

1

는 질문에 대한 대답 다른 스레드에 대한 링크입니다.

CS193P - Adding cancel button to iOS calculator

내가 왜 self.model = 전무를 설명 할 수 있는지 수 있습니다;

모델에 대해 비유를 사용하려고합니다. 이 백서에서는 스택을 작성하고 모델에 대해 알고있는 추가 항목을 작성할 수 있습니다.

강사가 모델에 대해 게터를 천천히 인스턴스화한다고 가정합니다. self.model을 호출 할 때 이미 모델이있는 용지가 있으면 모델에 사용할 용지가없는 경우 빈 종이를 집어서 만듭니다 귀하의 모델.

이제 self.model = nil; 당신은 당신의 모델 종이를 버리라고 말한다. 즉, 스택이나 모델에 포함 된 추가 항목을 더 오래 가질 수 있습니다.

게터가 느슨하게 인스턴스화되면 다음 번에 모델을 요청할 때 이미 모델이 없으므로 새로운 모델이됩니다.

빠른 요약은 self.model = nil; 스택을 비우지 않으며, 스택을 완전히 던져 버리고, 비어있는 스택을 가지고 있지 않으며, 스택이 없습니다.

clearOperandsStack은 스택을 비우는 대신 비어있는 스택을 사용합니다.

+0

@Joe_Schmoe에 대한 명확한 설명을 가져 주셔서 감사합니다. 더 나은 관행이있는 대회가 있습니까? 스택을 버리거나 그냥 지우려면? – Joey