我将对象添加到模型中的NSMutableArray堆栈中。这是界面:

@interface calcModel ()
@property (nonatomic, strong) NSMutableArray *operandStack;

@end


并执行:

@implementation calcModel
@synthesize operandStack = _operandStack;

- (NSMutableArray *)operandStack;
{
if (_operandStack == nil) _operandStack = [[NSMutableArray alloc]init];
return _operandStack;
}


这个addobject方法可以正常工作:

- (void)pushValue:(double)number;
{
[self.operandStack addObject:[NSNumber numberWithDouble:number]];
NSLog(@"Array: %@", self.operandStack);
}


但这会使应用程序崩溃,并在日志中仅显示“ lldb”:

- (void)pushOperator:(NSString *)operator;
{
[self.operandStack addObject:operator];
NSLog(@"Array: %@", self.operandStack);
}


是什么导致此错误?

最佳答案

您要添加的NSString可能是nil。做这个:

- (void)pushOperator:(NSString *)operator {
    if (operator) {
        [self.operandStack addObject:operator];
        NSLog(@"Array: %@", self.operandStack);
    } else {
        NSLog(@"Oh no, it's nil.");
    }
}


如果是这样,请弄清楚为什么它是nil并修复它。或在添加之前检查它。

第一种方法不会崩溃的原因是,因为没有不能用于初始化NSNumber的双精度值,所以它永远不会是nil

09-06 20:53