0
나는 Objective C가 처음이다. 나는 스탠포드 강의에서 2011-12 가을 iOS 개발을 따랐으며 과제 1에서는 계산기에 소수점을 구현하도록 요청했다. 그래서 기본적으로 내가 설정 속성 userPressedDecimalPoint이 있고 난 카운터로 소수점 누를 때마다이 속성을 사용하려고Objective C에서 속성을 카운트로 사용하기
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringNumber;
@property (nonatomic,strong) CalculatorBrain *brain;
@property (nonatomic) int userPressedDecimalPoint;
@end
@implementation CalculatorViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringNumber = _userIsInTheMiddleOfEnteringNumber;
@synthesize userPressedDecimalPoint = _userPressedDecimalPoint;
@synthesize brain = _brain;
- (CalculatorBrain *) brain{
if (!_brain) _brain = [[CalculatorBrain alloc] init];
return _brain;
}
- (IBAction)digitpressed:(UIButton *)sender {
NSString *digit = sender.currentTitle;
if (digit == @"."){
self.userIsInTheMiddleOfEnteringNumber = YES;
self.userPressedDecimalPoint++;
}
if (self.userIsInTheMiddleOfEnteringNumber && self.userPressedDecimalPoint< 2){
self.display.text = [self.display.text stringByAppendingString:digit];
NSLog(@"decimal pressed: %d times",self.userPressedDecimalPoint);
}
else{
self.display.text = digit;
self.userIsInTheMiddleOfEnteringNumber = YES;
self.userPressedDecimalPoint = 1;
}
}
: 이것은 내 구현 모습입니다. 그러나 NSLog에서 얼마나 많은 시간을 내가 소수점을 누를지라도 그것은 단지 1 시간 만 눌렀음을 보여줍니다. 결과적으로 입력 된 경우 출력에 여러 개의 소수점이 표시됩니다. 모든 제안을 부탁드립니다. 감사! 수정 코드의
전체 버전 :
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringNumber;
@property (nonatomic,strong) CalculatorBrain *brain;
@property (nonatomic) int userPressedDecimalPoint;
@end
@implementation CalculatorViewController
@synthesize display = _display;
@synthesize userIsInTheMiddleOfEnteringNumber = _userIsInTheMiddleOfEnteringNumber;
@synthesize userPressedDecimalPoint = _userPressedDecimalPoint;
@synthesize brain = _brain;
- (CalculatorBrain *) brain{
if (!_brain) _brain = [[CalculatorBrain alloc] init];
return _brain;
}
- (IBAction)digitpressed:(UIButton *)sender {
NSString *digit = sender.currentTitle;
if ([digit isEqualToString:@"."]){
self.userIsInTheMiddleOfEnteringNumber = YES;
self.userPressedDecimalPoint++;
}
if (self.userIsInTheMiddleOfEnteringNumber && self.userPressedDecimalPoint< 2){
self.display.text = [self.display.text stringByAppendingString:digit];
// NSLog(@"decimal pressed: %d times",self.userPressedDecimalPoint);
}
else if (![digit isEqualToString:@"."]){
self.display.text = digit;
self.userIsInTheMiddleOfEnteringNumber = YES;
}
}
- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsInTheMiddleOfEnteringNumber) [self enterPressed];
double result = [self.brain performOperation:sender.currentTitle];
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;
}
- (IBAction)enterPressed {
self.userPressedDecimalPoint = 0;
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsInTheMiddleOfEnteringNumber = NO;
}
@end
OK self.userPressedDecimalPoint = 1 줄을 제거했을 때 NSLog 출력이 소수점을 몇 번이나 눌러도 0을 보여줍니다. – stud91
또한 문자열을 비교할 때'=='를 사용하면 안됩니다. 'isEqualToString :'을 대신 사용해보십시오. ('=='는 주소가 아닌 내용을 비교합니다.) 디버거에서 메서드를 단계별로 실행하여 원하는 위치로 이동하는지 확인합니다. –
감사합니다. 지금은 잘 작동합니다. – stud91