ios – 尝试移动UITableView行时崩溃

ios – 尝试移动UITableView行时崩溃,第1张

概述我在UITableView中有一些相当复杂的规则来移动行.每个部分有不确定数量的部分和行,并且根据各种规则,行可以在用户的​​部分内或部分之间移动到特定的其他位置. 所有数据更新,一切正常.但偶尔,在移动一行之后,应用程序将退出并突然出现一个空白区域,应该显示一行. 我正在使用: - (NSIndexPath *)tableView:(UITableView *)tableViewtargetI 我在UItableVIEw中有一些相当复杂的规则来移动行.每个部分有不确定数量的部分和行,并且根据各种规则,行可以在用户的​​部分内或部分之间移动到特定的其他位置.

所有数据更新,一切正常.但偶尔,在移动一行之后,应用程序将退出并突然出现一个空白区域,应该显示一行.

我正在使用:

- (NSIndexPath *)tableVIEw:(UItableVIEw *)tableVIEwtargetIndexPathForMoveFromrowAtIndexPath:(NSIndexPath *)sourceIndexPath

指定允许用户根据单元格的位置拖动行的位置. 98%的工作时间.但在某些情况下,当只允许用户在各部分之间拖动时(无法对部分内的行重新排序)会出现此错误,然后在没有行的区域上滚动浏览器后应用程序崩溃.

抛出的异常非常无用:

Terminating app due to uncaught exception ‘NSRangeException’,reason: ‘*** -[NSCFArray objectAtIndex:]: index (6) beyond bounds (6)

@H_404_26@

我的代码都没有在堆栈中.最后一个特定于UItableVIEw的方法是

– [UItableVIEw(UItableVIEwInternal)_visibleCellForGlobalRow:]

有人看过这个问题之前发生过吗?有任何想法吗?

解决方法 我只是在我的应用程序中点击我认为是同样的问题.

情况是我有两个表格部分.可以在部分内和部分之间拖动项目.用户可以将单元格拖动到第一部分中的任何行,但在第二部分中,项目会进行排序,因此对于任何给定的单元格,只有一个有效行.

如果我滚动视图以便第1部分的底部和第2部分的顶部可见,请抓住第1部分中排序到第2部分底部的项目,然后将其拖到第2部分的顶部,即我的tableVIEw: targetIndexPathForMoveFromrowAtIndexPath:toproposedindexPath:方法被调用,我返回正确的目标位置,即屏幕底部下方的几行.在UI中,您可以看到在屏幕底部创建一个空单元格,这不是正确的目标行.

当你放开细胞时,在屏幕底部(第2节中间)创建的那个假细胞就会停留在那里! tableVIEw:cellForRowAtIndexPath:永远不会为它调用它.一旦你尝试对那个单元格做任何事情,你就会崩溃.

我的第一个解决方案是在tableVIEw的末尾调用[tableVIEw reloadData]:moveRowAtIndexPath:toIndexPath:.但这会导致崩溃,所以我会在延迟后间接调用它.但是还有另一个错误:在延迟的reloadData调用之后,tableVIEw:moveRowAtIndexPath:toIndexPath:再次被一个伪造请求调用,将一个项目移过第一个部分的末尾到同一个位置.所以,我不得不添加代码来忽略虚假的无 *** 作请求.

那么,这是代码:

- (voID)tableVIEw:(UItableVIEw *)tableVIEw moveRowAtIndexPath:(NSIndexPath *)pathSrc toIndexPath:(NSIndexPath *)pathDst{  // APPLE_BUG: after doing the delayed table reload (see below),we get a bogus  // request to move a nonexistant cell to its current location  if (pathSrc.row == pathDst.row && pathSrc.section == pathDst.section)    return;  // update your data model to reflect the move...  // APPLE_BUG: if you move a cell to a row that's off-screen (because the destination  // has been modifIEd),the bogus cell gets created and eventually will cause a crash  [self performSelector:@selector(delayedReloadData:) withObject:tableVIEw afterDelay:0];}- (voID)delayedReloadData:(UItableVIEw *)tableVIEw{  Assert(tableVIEw == self.tableVIEw);  [tableVIEw reloadData];}

请注意,仍然存在UI错误.在屏幕上,拖动的单元格被动画化为虚假的空单元格.在动画结束时,使用该行的正确数据重新绘制空单元格,但是敏锐的用户会注意到拖动的单元格被动画化到错误的位置,然后立即变形到不同的单元格.

这绝对是一个愚蠢的用户界面.我考虑将正确的目的地行滚动到屏幕上,但如果我这样做,它将填满第二部分的屏幕,然后任何试图拖回到第一部分的行为都会被我(现在烦人的)自动滚动不断挫败.我可能不得不更改UI,但这需要对我的数据模型进行一些复杂且麻烦的更改.

总结

以上是内存溢出为你收集整理的ios – 尝试移动UITableView行时崩溃全部内容,希望文章能够帮你解决ios – 尝试移动UITableView行时崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1073420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存