Objective c 将NSNumber对象添加到NSMutableArray

Objective c 将NSNumber对象添加到NSMutableArray,objective-c,xcode,cocoa-touch,Objective C,Xcode,Cocoa Touch,这段代码会导致错误,但应该是正确的 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSNumber *rowNumber = [[NSNumber alloc] initWithInt:indexPath.row]; [genreArray addObject:rowNumber]; [self.tableView reloadData

这段代码会导致错误,但应该是正确的

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSNumber *rowNumber = [[NSNumber alloc] initWithInt:indexPath.row];
    [genreArray addObject:rowNumber];
    [self.tableView reloadData];
}
genrearay
是一个
NSMutableArray

//valid declaration + instantiation
NSMutableArray *genreArray = [NSArray array]; 

//valid at compile-time : genreArray is supposed to be mutable
//however will result in runtime error : genreArray is actually immutable
[genreArray addObject:anObject];
但是一接触到手机我就发现了这个错误

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
*** First throw call stack:
(0x1c9c012 0x10d9e7e 0x1c9bdeb 0x1d1c9a5 0x1d1c8b0 0x7b4c 0xcd285 0xcd4ed 0xad75b3 0x1c5b376 0x1c5ae06 0x1c42a82 0x1c41f44 0x1c41e1b 0x1bf67e3 0x1bf6668 0x1dffc 0x271d 0x2645)
libc++abi.dylib: terminate called throwing an exception

有人知道为什么这不起作用吗?

因为你的数组是不可变的。。。 检查实例化
genrearay
的代码:类型声明和实例化都必须使用
NSMutableArray

//valid declaration + instantiation
NSMutableArray *genreArray = [NSArray array]; 

//valid at compile-time : genreArray is supposed to be mutable
//however will result in runtime error : genreArray is actually immutable
[genreArray addObject:anObject];

除了简单的答案之外,您还可以更改
NSNumber*rowNumber=[[NSNumber alloc]initWithInt:indexPath.row]带有
NSNumber*rowNumber=@(indexPath.row)你有alloc
genreArray=[[NSMutableArray alloc]init]问题是我将其分配为NSMutableArray,但随后我写道:genreArray=someOtherArray;someOtherArray是数组,不是可变数组。现在我用[NSMutableArray arrayWithArray:someOtherArray]分配它;真管用!我发现了问题所在。有一个worng初始化,谢谢=)