2

このコードはエラーを引き起こしますが、正しいはずです。

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

genreArrayですNSMutableArray

しかし、セルに触れると、このエラーが発生します

*** 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

なぜこれが機能しないのか、誰にもわかりませんか?

4

1 に答える 1

3

あなたの配列は不変であるため...インスタンス化したコードを確認してくださいgenreArray:両方の型宣言、およびインスタンス化を行う必要があります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];
于 2013-02-06T07:53:13.157 に答える