【发布时间】:2011-07-11 09:28:35
【问题描述】:
我有一个 UITableViewController,标题中有一个 NSMutableArray,如下所示:
NSMutableArray *someArray;
我还声明了属性:
@property (nonatomic, retain) NSMutableArray *someArray;
在 .m 文件中,我在方法中加载数组:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
someArray = [[NSMutableArray alloc] init];
[self loadArrayData];
[tableview reloadData];
}
表格填充得很好,添加没问题,但是当我尝试删除一行时,应用程序在以下行崩溃:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[someArray removeObjectAtIndex:indexPath.row];
//update table etc..
如果我使用调试器,我可以看到数组有一些对象,当我记录 indexPath.row 时,我得到一个在数组大小内的值。
我不明白为什么它在这条线上崩溃...谁能帮助我?
控制台输出:
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayI removeObjectAtIndex:]:无法识别的选择器已发送到实例 0x6193890”
【问题讨论】:
-
有关崩溃原因的更多信息可能会有所帮助。发生了什么样的崩溃?
-
对不起,我已经添加了控制台错误输出..
-
嗯,我真的不知道。很明显,一个无效的参数被传递给 removeObjectAtIndex:。然而 indexPath.row 应该返回一个 NSUInteger 这是一个有效的参数。
-
这和我想的一模一样...同样将值 0 传递给方法会导致它崩溃...
-
并且您 100% 确定该数组不会在某个地方被不可变数组替换?再次检查。