NSMutableArray addObject是否为零?

时间:2014-05-21 22:20:10

标签: ios objective-c nsmutablearray null

我是iOS开发的新手,这是我的第一个应用计算器, 但是NSMuteableArray“_numberArrayWaitingForCalculate”总是“零”,我不知道该怎么办???

这是界面

@interface demoViewController ()
@property (strong,nonatomic)NSString *valueString;
@property (strong,nonatomic)NSMutableArray *numberArrayWaitingForCalculate;
@end

这是工具1

@implementation demoViewController
@synthesize numberArrayWaitingForCalculate=_numberArrayWaitingForCalculate;

- (NSMutableArray *)numberWaitingForCalculate
{
    if(!_numberArrayWaitingForCalculate)
        _numberArrayWaitingForCalculate=[[NSMutableArray alloc]init];

    return _numberArrayWaitingForCalculate;
}

这里是tapNumber方法

- (IBAction)tapNumber:(UIButton *)numberButton {
    if(LastButtonWasMode)
    {
        _valueString=@"";
        LastButtonWasMode=NO;
    }

    NSString *numberAsString = numberButton.currentTitle;
    _valueString=[_valueString stringByAppendingString:numberAsString];
    result.text=[NSString stringWithFormat:@"%@",_valueString];
    }

这里是tapPlus方法

- (IBAction)tapPlus:(id)sender {
    [_numberArrayWaitingForCalculate addObject:[NSNumber numberWithInt:[_valueString intValue]]];
    resultOfAllNumberInputBefore +=[_valueString intValue];
   [self setMode:1];

}

2 个答案:

答案 0 :(得分:3)

以下行应该使用属性而不是实例变量。即你实际上并没有调用分配数组的getter。

更改此行:

[_numberArrayWaitingForCalculate addObject:[NSNumber numberWithInt:[_valueString intValue]]];

为:

[self.numberArrayWaitingForCalculate addObject:[NSNumber numberWithInt:[_valueString intValue]]];

答案 1 :(得分:3)

你创建了一个“延迟加载”可变数组的getter(意味着如果它已经不存在你就创建它。这是一种有效的方法。

但是,如果你这样做,你需要总是使用getter。你直接使用iVar(_numberArrayWaitingForCalculate)。不要那样做。将所有“_numberArrayWaitingForCalculate”实例替换为[self numberArrayWaitingForCalculate],除了getter / setter的实现,可能还有dealloc方法。

所以你的tapPlus方法应该是:

- (IBAction)tapPlus:(id)sender 
{
    [[self numberArrayWaitingForCalculate] addObject:[NSNumber numberWithInt:[_valueString intValue]]];
    resultOfAllNumberInputBefore +=[_valueString intValue];
   [self setMode:1];
}

编辑:

顺便说一句,对于像空的可变数组一样轻量级的东西,我想我会采取不同的方法。我不是在getter中延迟加载数组,而是为我的类创建一个init方法,创建一个空的可变数组并将其安装在iVar中。

视图控制器之类的对象可以通过多种方式进行初始化。它可能会使用initWithNibName:bundle:initWithCoder:

进行初始化

在这种情况下我做的是创建一个方法doInitSetup,并从两个地方调用它。