首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推送在Xcode4.4中不起作用的NSMutableArray美洲狮

推送在Xcode4.4中不起作用的NSMutableArray美洲狮
EN

Stack Overflow用户
提问于 2012-08-01 13:46:40
回答 1查看 280关注 0票数 0

我无法在NSMutableArray上推送东西

请参阅附件中的代码

代码语言:javascript
复制
#import "CalculatorBrain.h"

@implementation CalculatorBrain

@synthesize operandStack = _operandStack;

-(NSMutableArray*) operandStack{
    if(self.operandStack == NULL){
        self.operandStack = [[NSMutableArray alloc] init];
    }
    return self.operandStack;
}

-(void)setOperandStack:(NSMutableArray *)operandStack{
    _operandStack = operandStack;
}

-(void) pushOperand:(double) operand{
    [self.operandStack addObject:[NSNumber numberWithDouble:operand]];
    int count = [self.operandStack count];
    NSLog(@"Number pushed is %g", [[self.operandStack objectAtIndex:count - 1] doubleValue]);
}

-(double)popOperand{
    int count = [self.operandStack count];
    NSNumber* value = [self.operandStack objectAtIndex:count - 1];
    double val = 0;
    if(value){
        val = [value doubleValue];
        [self.operandStack removeLastObject];
    }
    NSLog(@"popped %g",val);
    return val;
}
@end

该操作的调用方式如下:

代码语言:javascript
复制
- (IBAction)enterPressed {
    double mynumber= [self.display.text doubleValue];
    NSLog(@"enter pressed....Number is %g", mynumber);
    [self.Brain pushOperand:mynumber];
    int count = [self.Brain.operandStack count];
    NSLog(@"enter pressed... pusehed operand is %g", [[self.Brain.operandStack objectAtIndex:count - 1] doubleValue]);
    self.amIInMiddleOfNumber = NO;
}

我使用这个程序得到的输出是

代码语言:javascript
复制
 2012-07-31 22:30:53.838 Calculator[13408:c07] enter pressed....Number is 45
 2012-07-31 22:30:53.840 Calculator[13408:c07] enter pressed... pusehed operand is 0

我也尝试过lastObject,但它不起作用。

编辑此处

我试着添加了这个

代码语言:javascript
复制
  -(CalculatorBrain *)Brain{
      if(self.Brain == NULL){
          self.Brain = [[CalculatorBrain alloc] init];
      }
      return self.Brain;
  }

现在我的输出是

代码语言:javascript
复制
  2012-08-01 21:03:00.282 Calculator[13706:c07] enter pressed....Number is 23

在那之后整个应用程序都会崩溃

谢谢。我看到同样的程序在xcode和lion上运行。

EN

回答 1

Stack Overflow用户

发布于 2012-08-02 14:19:24

您的Brain访问器方法正在创建一个无限循环。self.Brain调用此方法,您可以从其内部调用它。

首先,重构该属性,将其命名为brain。Objective-C中的属性和实例变量以小写字母开头。

像这样合成:

代码语言:javascript
复制
@synthesize brain = _brain;

这将创建一个名为_brain的支持实例变量,它保存您的属性的值。(请注意,这在Xcode4.4中是自动完成的,但我们将把它留在这里进行说明)。

让你的存取器方法像这样。与您当前实现的主要不同之处在于,您使用的是支持ivar,而不是递归调用属性:

代码语言:javascript
复制
-(CalculatorBrain *)brain{
    if(!_brain){
        self.brain = [[CalculatorBrain alloc] init];
    }
    return _brain;
}

请注意,使用属性设置值很好,因为这将调用setBrain,并确保调用自定义设置器中的任何内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11753199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档