Iphone NSMutableArray仅适用于25项

Iphone NSMutableArray仅适用于25项,iphone,cocoa-touch,nsmutablearray,Iphone,Cocoa Touch,Nsmutablearray,我有一个NSMutableArray,用于UITableView。我面临的奇怪问题是 [results removeObjectAtIndex:rowIndexPath.row]; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:rowIndexPath] withRowAnimation:UITableViewRowAnimationFade]; 只对表的前25个元素有效,但在26个元素崩溃?在我的代码中,没有任何地方提到

我有一个NSMutableArray,用于UITableView。我面临的奇怪问题是

[results removeObjectAtIndex:rowIndexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:rowIndexPath] withRowAnimation:UITableViewRowAnimationFade];
只对表的前25个元素有效,但在26个元素崩溃?在我的代码中,没有任何地方提到25,我不知道它为什么会这样做

所有元素都通过UITableView正确显示,因此它们已正确插入表中


有什么帮助吗?

从索引中删除项时,可能没有重新加载表,因此rowIndexPath.row值没有正确调整,因此会超出数组的大小。

只是猜测:


使用
removeObjectAtIndex:(nsInteger)index
,您可以在文档中看到:为了填补空白,索引之外的所有元素都通过从其索引中减去1来移动。因此,如果要折叠元素,就不能在不更新长度的情况下迭代数组的计数,否则您将尝试读取无效的索引,因为列表被先前的删除折叠了,并且比您预期的要短。

但为什么前25行总是有效?只有第26行始终失败。当我尝试删除第26行时,崩溃正好发生在这一行,而不是在数组的末尾,我预计会遇到麻烦。这可能只是一种特殊情况,即您引用了超出范围的内容。请通过删除索引0处的元素重复此操作。[结果去除目标指数:0];您应该能够像这样删除数组中的所有元素。它应该证明Jack所说的,但长度是在需要时自动重新计算的。我可以连续删除第25行的元素(如果有超过25行的元素),没有问题。如果你说它是如何崩溃的,我会更容易帮助你