将NSNumber插入NSMutableArray

时间:2013-04-13 02:23:49

标签: objective-c

allTiles是一个声明容量为9的NSMutuableArray。接下来,循环使用名为resetArray的方法插入9个NSNull对象。我有一个名为addToArray的方法,它接受一个NSNumber和索引,在该索引处插入值。

在另一个类中,我有int currentTileValue = [self getTileValue];,它返回一个tile值。该值既是数组中的数字,也是索引。每当我尝试添加到数组时,它都会崩溃而没有任何迹象表明原因。

allTiles = [[NSMutableArray alloc] initWithCapacity:9];
[self resetArray:allTiles];

- (void) resetArray:(NSMutableArray*) array {
for (int i = 0; i < 9; i++) {
    [array insertObject:[NSNull null] atIndex:i];
}
}

- (void) addToArray:(NSNumber*)value :(int)index {
[allTiles insertObject: value atIndex:index];
}
//Different class
//Here is where I am trying to insert into the array.
[(BoxView *)self.superview addToArray:(NSNumber*)currentTileValue :currentTileValue];

导致此崩溃的原因是什么?

1 个答案:

答案 0 :(得分:2)

您声明currentTitleValueint。鉴于此,您需要更改此行:

[(BoxView *)self.superview addToArray:(NSNumber*)currentTileValue :currentTileValue];

为:

[(BoxView *)self.superview addToArray:@(currentTileValue) :currentTileValue];

您无法将int强制转换为NSNumber指针。你需要转换它。

此外,您的addToArray方法不正确。由于您使用9 NSNull个对象预先填充数组,因此您需要调用replaceObjectAtIndex:withObject:,而不是insertObject:atIndex(这假设您只需要9个值):

[allTiles replaceObjectAtIndex:index withObject:value];

您还应该将addToArray::方法重命名为更好的方法:

- (void)addToArray:(NSNumber*)value index:(int)index {