【发布时间】:2009-12-10 22:20:18
【问题描述】:
我有一些相当复杂的规则来移动UITableView 中的行。每个部分有未定义的部分和行数,并且根据各种规则,用户可以在部分内或部分之间将行移动到特定的其他位置。
所有数据都在更新,一切正常。但偶尔,在移动一行后,应用程序会假发,突然会出现一个空白区域,应该显示一行。
我正在使用:
- (NSIndexPath *)tableView:(UITableView *)tableView
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
根据单元格的位置指定允许用户拖动行的位置。 98% 的时间它都在工作。但在某些情况下,当用户只允许在部分之间拖动(不能重新排列部分内的行)时,会出现此错误,然后应用在滚动到没有行的区域后崩溃。
抛出的异常没什么用:
由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** -[NSCFArray objectAtIndex:]:索引(6)超出范围(6)
我的代码都没有在堆栈上。最后一个 UITableView 特有的方法是
-[UITableView(UITableViewInternal) _visibleCellForGlobalRow:]
以前有人见过这个问题吗?有什么想法吗?
【问题讨论】:
-
你解决过这个 Ed 吗?没有标记为正确的答案,我也看到了同样的问题。
-
不,我从来没有解决过这个问题。我不得不放宽可以将一行拖到哪里的规则,这样就不会发生
-
您是否在 moveRowAtIndexPath 方法中执行任何类型的重新加载操作(例如 reloadData、reloadSections 或 reloadRowsAtIndexPath)?我遇到了同样的问题,我尝试按照下面 Tom S. 的建议在延迟的 performSelector 中重新加载,它似乎有效,除了我将延迟设置为 1 秒以保持 iPhone 3.x、4 .x,模拟器很开心。可以肯定的是,这有点骇人听闻。
-
这可能无法解决这个问题,但我发现必须在“moveRowAtIndexPath”末尾调用“reloadData”,否则可能会引发内部不一致,特别是如果您支持轮换。
标签: ios iphone cocoa-touch uitableview