我是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];
}
答案 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,并从两个地方调用它。