- (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
。那是为什么?
答案 0 :(得分:0)
所有实例变量都以nil开头。对nil的方法调用返回nil(或什么都不做)。您需要在某个时刻自己实例化NSMutableArray。这通常在-init或内联代码检查中完成,如果ivar是nil,如果是,则分配它:
if (self.boardCol == nil) {
self.boardCol = [[NSMutableArray alloc] init];
}
如果涉及多个线程,上述操作不安全。在-init方法中创建它们通常更容易。