método de aplicación de calculadora xcode

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.

preguntado el 22 de mayo de 12 a las 08:05

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. -

Además, "no funciona" no es lo suficientemente específico. ¿Qué es exactamente lo que no funciona? ¿Se bloquea o simplemente no hace nada? -

el método de operación no funciona. "*" "/" "+" "-" pero los números y la función de entrada funcionan bien. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.