gpt4 book ai didi

ios - UITableView 在删除末尾的项目时崩溃

转载 作者:可可西里 更新时间:2023-11-01 04:01:56 26 4
gpt4 key购买 nike

我有一个带有一堆部分/行的 UITableView。我一直被一个奇怪的错误所困扰,当我删除一行时,我的程序会崩溃。我的删除代码如下:

[self.tableView beginUpdates];
NSMutableArray* myArray = [self.myArray mutableCopy];
[myArray removeObjectAtIndex:indexPath.row];
self.myArray = myArray;

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

调试器在 endUpdates 上向我抛出以下错误。

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

现在,为了节省大家一些时间,我已经进行了广泛的测试和验证,我的数据源更新和删除正确的 indexPath 的一切都是绝对正确的。我只是注意到,只有当我一直滚动到我的 tableview 底部以至于我无法再滚动,然后删除页面可见区域中的一个单元格时,才会出现此问题。

我可以在我的 tableview 中的任何其他地方正确删除,只要它下面有更多屏幕外的内容,但是一旦我在 tableview 的末尾,删除就会抛出这个错误。

如果有帮助,我基本上在 UIPageViewController 中有一个 UITableViewController(普通样式)。我已经尝试删除 UIPageViewController 并只是推送到 UITableViewController,但仍然会出现此错误。

有谁知道我该如何克服这个问题?

编辑:

似乎很多人仍然认为它可能是数组,但事情就是这样。我可以在我的表格 View 中移动我的部分(所有部分都有可以删除的行)。当 tableview 完全滚动到底部时,删除任何可见部分中的行时,我总是会崩溃。此代码片段被抽象并用于所有部分,因此我非常确定代码是正确的。

当我在 tableview 居中的部分中删除一行时,我注意到该行向上滑动以删除,即使我说要使用淡入淡出动画。动画将其下方的行或部分动画化,这是正确的行为。我觉得这可能与当 tableview 到达其内容末尾时有关,它试图向上滚动某些内容,但那里什么也没有。

破解:我刚才实现的一个 hack 是在 tableView.tableFooterView 中放置一个与我的 tableView 大小相同的普通 UIView。这导致我的 tableView 具有更大的可滚动大小,这是我不喜欢的,但有了它,崩溃不会发生,因为当最后一个单元格被删除时有更多的可滚动空间向上移动。如果我不必执行此操作,我将不胜感激。

好吧,它似乎只有在页脚 View 非常大的情况下才有效。如果我将页脚 View 变小,例如 100 像素,当您滚动到 tableview 的边缘时它仍然会崩溃。

堆栈跟踪:(调试器将首先崩溃到上面代码中的 endUpdates 行,当我在调试器上再次点击播放时,出现此堆栈跟踪)

2014-07-18 05:52:41.314 ScriptChart[26419:905949] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(
0 CoreFoundation 0x0000000109c9f055 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010d1d8a1c objc_exception_throw + 45
2 CoreFoundation 0x0000000109b6d92a -[__NSArrayM insertObject:atIndex:] + 954
3 UIKit 0x000000010b86c424 __46-[UITableView _updateWithItems:updateSupport:]_block_invoke915 + 177
4 UIKit 0x000000010b803a4c +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] + 473
5 UIKit 0x000000010b803ca1 +[UIView(UIViewAnimationWithBlocks) animateWithDuration:delay:options:animations:completion:] + 57
6 UIKit 0x000000010b86bfc3 -[UITableView _updateWithItems:updateSupport:] + 2803
7 UIKit 0x000000010b8660b2 -[UITableView _endCellAnimationsWithContext:] + 11934
8 ScriptChart 0x000000010863f272 -[SCLabListNoteSection deleteCell:] + 1250
9 ScriptChart 0x00000001085e127f __45-[SCLabPanelTableViewCell infoButtonPressed:]_block_invoke127 + 207
10 UIKit 0x000000010b9e0fe7 -[UIAlertController _fireOffActionOnTargetIfValidForAction:] + 55
11 UIKit 0x000000010b9e14d5 __85-[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:]_block_invoke + 30
12 UIKit 0x000000010b892bc4 -[UIPresentationController transitionDidFinish:] + 1118
13 UIKit 0x000000010b894d8e __56-[UIPresentationController runTransitionForCurrentState]_block_invoke_2 + 133
14 UIKit 0x000000010bec4123 -[_UIViewControllerTransitionContext completeTransition:] + 110
15 UIKit 0x000000010b8037fd -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 326
16 UIKit 0x000000010b7ec42a -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 209
17 UIKit 0x000000010b7ec760 -[UIViewAnimationState animationDidStop:finished:] + 76
18 QuartzCore 0x000000010b4dff9e _ZN2CA5Layer23run_animation_callbacksEPv + 308
19 libdispatch.dylib 0x000000010d537d64 _dispatch_client_callout + 8
20 libdispatch.dylib 0x000000010d523f82 _dispatch_main_queue_callback_4CF + 941
21 CoreFoundation 0x0000000109c07ae9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
22 CoreFoundation 0x0000000109bca46b __CFRunLoopRun + 2043
23 CoreFoundation 0x0000000109bc9a06 CFRunLoopRunSpecific + 470
24 GraphicsServices 0x000000010db6cabf GSEventRunModal + 161
25 UIKit 0x000000010b792cf8 UIApplicationMain + 1282
26 ScriptChart 0x00000001085ca153 main + 179
27 libdyld.dylib 0x000000010d56c145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

最佳答案

你是在调用 scrollToRowAtIndexPath 吗?这可能会导致崩溃。

关于ios - UITableView 在删除末尾的项目时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24824646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com