método de aplicación de calculadora xcode
Frecuentes
Visto 941 veces
0
Estoy haciendo una aplicación de calculadora basada en un tutorial en línea, itunes.apple. com/itunes-u/ipad-iphone-application-desarrollo/ id473757255 (tut 2)
Seguí cada paso de cerca y todo estuvo bien, hasta el paso final de una llamada al método performOperation. Cuando construyo y ejecuto, los números y la función de entrada funcionan bien. Solo el método de operación no funciona. Así que supongo que el principal problema está en el método de operación.
BrainCalculator.h
@interface CalculatorBrain : NSObject
-(void) pushOperand: (double)operand;
-(double) performOperation: (NSString*) operation;
@end
BrainCalculator.m
#import "CalculatorBrain.h"
@interface CalculatorBrain()
@property (nonatomic, strong) NSMutableArray* _operandStack;
@end
@implementation CalculatorBrain
@synthesize _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];
}
-(double)performOperation:(NSString *)operation
{
double result = 0;
if ([operation isEqualToString:@"+"]){
result=[self popOperand] + [self popOperand];
}else if ([@"*" isEqualToString:operation]){
result = [self popOperand] * [self popOperand];
}else if ([operation isEqualToString:@"-"]){
double subtrahend = [self popOperand];
result = [self popOperand] - subtrahend;
}else if( [operation isEqualToString:@"/"]){
double divisor = [self popOperand];
if (divisor) result = [self popOperand] / divisor;
}
[self pushOperand:result];
return result;
}
@end
Inicialmente, me pareció que el método performOperation era bastante sospechoso, así que traté de manipular el
}else if ([@"*" isEqualToString:operation]){
a
}else if ([operation isEqualToString:@"*"]){
esperando que funcionara, pero lamentablemente no fue así.
Solo para información adicional
controlador de vista.m
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController ()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringANumber;
@property (nonatomic, strong) CalculatorBrain *brain;
@end
@implementation CalculatorViewController
@synthesize display;
@synthesize userIsInTheMiddleOfEnteringANumber;
@synthesize brain= _brain;
-(CalculatorBrain*)brain
{
if(!_brain)_brain = [[CalculatorBrain alloc]init];
return _brain;
}
- (IBAction)digitPressed:(UIButton *)sender {
NSString * digit= [ sender currentTitle];
if (userIsInTheMiddleOfEnteringANumber){
self.display.text = [self.display.text stringByAppendingString:digit];
}
else{
self.display.text=digit;
self.userIsInTheMiddleOfEnteringANumber = YES;
}
}
- (IBAction)enterPressed {
[self.brain pushOperand:[self.display.text doubleValue]];
self.userIsInTheMiddleOfEnteringANumber = NO;
}
- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsInTheMiddleOfEnteringANumber){
[self enterPressed];
}
NSString *operation = [sender currentTitle];
double result = [self.brain performOperation:operation];
self.display.text = [NSString stringWithFormat:@"%g", result];
}
@end
La ayuda será muy apreciada ya que estoy practicando xcode para prepararme para mi proyecto principal de último año.
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas xcode calculator or haz tu propia pregunta.
Su propiedad operandStack no está declarada correctamente, ¿este código incluso se compila? Ha llamado a la propiedad _operandStack pero se refiere a ella como self.operandStack. El guión bajo se usa para el ivar de respaldo, no para el nombre de la propiedad. - jrturton
Además, "no funciona" no es lo suficientemente específico. ¿Qué es exactamente lo que no funciona? ¿Se bloquea o simplemente no hace nada? - jrturton
el método de operación no funciona. "*" "/" "+" "-" pero los números y la función de entrada funcionan bien. - Yang Jie Domodomo