我有一个可扩展/可折叠部分的tableview。它在iOS 8中运行良好,但在iOS 9中的reloadSections崩溃。这是代码:
NSRange range = NSMakeRange(selectedSection, 1);
[_tableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:range] withRowAnimation:UITableViewRowAnimationAutomatic];
我已经查看了这个问题,似乎有些人遇到过这个问题但是没有一个解决方案对我有用。当然我可以重新加载表,但这不会给我动画外观,我只是不希望整个tableview重新加载。这是我唯一的日志(通过控制台上的bt命令):
thread #1: tid = 0xfecd, 0x25be16aa UIKit__46-[UITableView _updateWithItems:updateSupport:]_block_invoke + 98, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xfffffffc)
frame #0: 0x25be16aa UIKit__46-[UITableView _updateWithItems:updateSupport:]_block_invoke + 98
frame #1: 0x25d074fc UIKit__46-[UITableView _updateWithItems:updateSupport:]_block_invoke1011 + 184
frame #2: 0x25be10b4 UIKit-[UITableView _updateWithItems:updateSupport:] + 2348
frame #3: 0x25bc5684 UIKit-[UITableView _endCellAnimationsWithContext:] + 10648
frame #4: 0x25bc2b5a UIKit-[UITableView _updateSections:updateAction:withRowAnimation:headerFooterOnly:] + 434
frame #5: 0x25bc299e UIKit`-[UITableView reloadSections:withRowAnimation:] + 38
frame #6: 0x0028d956 MyAPP-[MyView expandCollapseSection:](self=0x16f90170, _cmd=0x0096e193, sender=0x16fec2d0) + 1230 at MyView.m:256
frame #7: 0x25a09770 UIKit-[UIApplication sendAction:to:from:forEvent:] + 80
frame #8: 0x25a09700 UIKit-[UIControl sendAction:to:forEvent:] + 64
frame #9: 0x259f161e UIKit-[UIControl _sendActionsForEvents:withEvent:] + 446
frame #10: 0x25a09050 UIKit-[UIControl touchesEnded:withEvent:] + 616
frame #11: 0x259c2fc6 UIKit_UIGestureRecognizerUpdate + 10934
frame #12: 0x25a01e10 UIKit-[UIWindow _sendGesturesForEvent:] + 904
frame #13: 0x25a015c2 UIKit-[UIWindow sendEvent:] + 622
frame #14: 0x259d2118 UIKit-[UIApplication sendEvent:] + 204
frame #15: 0x259d0756 UIKit_UIApplicationHandleEventQueue + 5134
frame #16: 0x217fd256 CoreFoundation__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
frame #17: 0x217fce46 CoreFoundation__CFRunLoopDoSources0 + 454
frame #18: 0x217fb1ae CoreFoundation__CFRunLoopRun + 806
frame #19: 0x2174dbb8 CoreFoundationCFRunLoopRunSpecific + 516
frame #20: 0x2174d9ac CoreFoundationCFRunLoopRunInMode + 108
frame #21: 0x229c7af8 GraphicsServicesGSEventRunModal + 160
frame #22: 0x25a39fb4 UIKitUIApplicationMain + 144
frame #23: 0x0009a1ec MyAppmain(argc=1, argv=0x0108bb24) + 108 at main.m:17
我尝试过使用更新块(beginUpdates)和动画块但是徒劳无功。 任何帮助表示赞赏。
答案 0 :(得分:1)
我遇到了同样的问题,但仅限于iPhone 6,仅在某些部分。它适用于iPhone6 plus。每个设备都使用.reloadData(),但我想要一个漂亮的动画。当我将折叠的部分行数设置为1而不是0时,它也可以。该问题与在iOS9中重新加载空部分有关。 我使用这个工作arround所以它至少是tableview的动画更新。这里是Swift代码:
UIView.transitionWithView(self.yourTableView,
duration: 0.35,
options: .TransitionCrossDissolve,
animations:
{ () -> Void in
self.forecastTableView.reloadData()
},
completion: nil);
答案 1 :(得分:0)
尝试在 [self.tableview beginUpdates] 和 [self.tableview endUpdates]中封装您的部分重新加载声明:
[self.tableview beginUpdates]
NSRange range = NSMakeRange(indexPath.section, 1);
NSIndexSet *sectionToReload = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableview endUpdates]
希望这会对你有所帮助:)。
答案 2 :(得分:-1)
我写了一个工作点击的小例子来扩展tableview部分,可以在这里找到:https://github.com/CharlesThierry/stackoverflow-35056650
我无法用它来重现你的问题,但是从我做过的很少的研究来看,它与没有行的部分有关(来自this post)
如果您还没有,可以尝试上一篇文章中的解决方案:
在[self.tableview beginUpdates]
添加
if ([self.tableView.dataSource numberOfSectionsInTableView:self.tableView] == 1 &&
[self.tableView.dataSource tableView:self.tableView numberOfRowsInSection:0] == 0)
{
[self.tableView reloadData];
}