无法将NSNumber对象添加到NSMutableArray

时间:2016-05-06 20:42:05

标签: ios objective-c nsmutablearray nsdictionary

- (void)setToInitialStateMain
{
    [super clearBoard];

    if (_data[@"StoneOne"] != nil) {
        NSDictionary* stoneOne = _data[@"StoneOne"];
        NSNumber* c = stoneOne[@"Column"];
        NSNumber* r = stoneOne[@"Row"];
        NSInteger column = [c intValue];
        NSInteger row = [r intValue];
        [_boardCol addObject:[NSNumber numberWithInt:column]];
        [_boardRow addObject:[NSNumber numberWithInt:row]];
    }
}

因此@"StoneOne"@"Column"@"Row"密钥来自NSDictionary plist文件。当我尝试将NSNumber @"Column"转换为NSInteger时,一切正常。

现在,[_boardCol addObject:[NSNumber numberWithInt:column]];行在'列'是正确的整数(2)。但是,在方法调用结束时设置断点以检查_boardCol(以及_boardRow)时,两个NSMutableArray*实例变量都在读取nil。那是为什么?

1 个答案:

答案 0 :(得分:0)

所有实例变量都以nil开头。对nil的方法调用返回nil(或什么都不做)。您需要在某个时刻自己实例化NSMutableArray。这通常在-init或内联代码检查中完成,如果ivar是nil,如果是,则分配它:

if (self.boardCol == nil) {
    self.boardCol = [[NSMutableArray alloc] init];
}

如果涉及多个线程,上述操作不安全。在-init方法中创建它们通常更容易。