2012-02-14 4 views
1

좋아요, 그렇기 때문에 나는 무료 온라인으로 게시 한 Stanford iOS 개발 과정을 연구 중입니다. 나는 프로그래밍 가능한 변수를 만드는 방법을 알아 내려고 노력해 왔습니다. 지금까지 잘 진행되어 왔지만, 다음 코드 행은 이전에 입력 한 변수 대신 @ "x ="변수를 프로그래밍한다고 생각합니다.목표 C 계산기 프로그래밍 변수

뷰 컨트롤러 :

#import "ViewController.h" 
#import "CalculatorBrain.h" 

@interface ViewController() 
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringANumber; 
@property (nonatomic) BOOL userPressedSomethingElse; 
@property (nonatomic, strong) CalculatorBrain *brain; 
@end 

@implementation ViewController 
@synthesize display; 
@synthesize inputHistory; 
@synthesize userPressedSomethingElse; 
@synthesize userIsInTheMiddleOfEnteringANumber; 
@synthesize brain = _brain; 

- (CalculatorBrain *)brain 
{ 
    if (!_brain) _brain = [[CalculatorBrain alloc] init]; 
    return _brain; 
} 

NSString *xValue = @"0"; 

- (IBAction)enterPressed 
// A specific action if enter is pressed 
{ 
    [self.brain pushOperand:[self.display.text doubleValue]]; 
    self.userIsInTheMiddleOfEnteringANumber = NO; 
    if (self.userPressedSomethingElse) 
    { 
     self.inputHistory.text = [self.inputHistory.text stringByAppendingString:@" "]; 
    } 
    self.userPressedSomethingElse = NO; 
} 

- (IBAction)variableChanged:(id)sender 
{ 
    if (self.userIsInTheMiddleOfEnteringANumber) 
    { 
     [self enterPressed]; 
    } 
    NSString *operation = [sender currentTitle]; 
    xValue = [self.brain programVariable:operation]; 
    self.inputHistory.text = [self.inputHistory.text stringByAppendingString:@"X="]; 
    self.inputHistory.text = [self.inputHistory.text stringByAppendingString:xValue]; 
} 

계산기 뇌 (하는 .m 하나)

#import "CalculatorBrain.h" 

@interface CalculatorBrain() 
@property (nonatomic,strong) NSMutableArray *operandStack; 
@end 

@implementation CalculatorBrain 

@synthesize operandStack = _operandStack; 
- (NSMutableArray *) operandStack 
{ 
    if (!_operandStack) 
    { 
     _operandStack = [[NSMutableArray alloc] init]; 
    } 
    return _operandStack; 
} 

- (void) pushOperand:(double)operand 
{ 
    NSNumber *operandObject = [NSNumber numberWithDouble:operand]; 
    [self.operandStack addObject:operandObject]; 
} 

- (double)popOperand 
{ 
    NSNumber *operandObject = [self.operandStack lastObject]; 
    if (operandObject) [self.operandStack removeLastObject]; 
    return [operandObject doubleValue]; 
} 

- (NSString *) programVariable: (NSString *) operation 
{ 
    double result = [self popOperand]; 
    NSString *resultString = [NSString stringWithFormat:@"%.2d",result]; 
    return resultString; 
} 

.H 계산기 뇌 :

#import <Foundation/Foundation.h> 

@interface CalculatorBrain : NSObject 

- (void) pushOperand: (double) operand; 
- (double) performOperation: (NSString *) operation; 
- (NSString *) programVariable: (NSString *) operation; 

@end 

푸시 버튼 "x ="라고 말하면서 추가 한 추적 문 때문에 xValue로 설정되었다는 것을 알았습니다. 그러나, 나는 그것을 고치는 법을 모른다. .. 어떤 생각?

+0

당신은'@synthesize brain = _brain;을 썼습니다. 왜 아직도 self.brain을 작성합니까? 로그 라인은 무엇을 보여줍니까? –

+0

로그 라인? 그게 뭐야? – BrainInaJar1245

+0

나는 당신의 추적 진술을 의미합니다. 그들은 무엇을 보여줍니까? –

답변

0

variableChanged: 방법에서는 처음에 if (!self.userIsInTheMiddleOfEnteringANumber)을 원할 수 있습니다. 변수 이름의 의미에서 필요성을 끌어내는 논리적 인 부정을 주목하십시오. 변수가 설정되어있는 방법이 보이지 않으므로 앱의 다른 곳에서 제대로 설정하고있는 것입니다.

또한 변수 xValueViewController의 인스턴스 변수로 변경하십시오. 현재 전역 정적 변수입니다. 두 개 이상의 ViewController 개체를 만든 경우 문제가 발생합니다.

+0

아니요. 입력하는 숫자에 관계없이 3.5x = 8, x = 3.5로 처리하지 않으므로 처리 방법이 다릅니다. – BrainInaJar1245