当前位置:  开发笔记 > IOS > 正文

当使用EXC_BAD_ACCESS调用endUpdates时,UITableView在iOS 9上崩溃

如何解决《当使用EXC_BAD_ACCESS调用endUpdates时,UITableView在iOS9上崩溃》经验,为你挑选了1个好方法。

在用户升级到iOS 9之后,我们注意到一系列Bad Access(EXC_BAD_ACCESS)崩溃,这些崩溃对于仍在iOS 8上的用户来说不会出现.当我们调用endUpdatesUITableView 时会发生这种情况.

崩溃日志包括以下原因:

在当前参数寄存器中找到的选择器名称:numberOfRowsInSection:

在当前参数寄存器中找到的选择器名称:indexPathForRowAtGlobalRow:

堆栈跟踪#1:

1   UIKit   __46-[UITableView _updateWithItems:updateSupport:]_block_invoke + 92
2   UIKit   __46-[UITableView _updateWithItems:updateSupport:]_block_invoke1007 + 224
3   UIKit   -[UITableView _updateWithItems:updateSupport:] + 2556
4   UIKit   -[UITableView _endCellAnimationsWithContext:] + 12892
[...]

堆栈跟踪#2:

1   UIKit   __46-[UITableView _updateWithItems:updateSupport:]_block_invoke + 100
2   UIKit   -[UITableViewRowData globalRowForRowAtIndexPath:] + 102
3   UIKit   __46-[UITableView _updateWithItems:updateSupport:]_block_invoke1007 + 182
4   UIKit   -[UITableView _updateWithItems:updateSupport:] + 2300
5   UIKit   -[UITableView _endCellAnimationsWithContext:] + 10552

我们能够重新解决这个问题,但是没有任何关于如何修复它的线索.



1> Toland Hon..:

当您的UITableView没有导致endUpdates与EXC_BAD_ACCESS崩溃的行时,看起来iOS9中存在一个错误.要解决此错误,您必须在调用beginUpdates之前调用tableView reloadData.

从Claudio Redi指导我的主题:iOS9 iPad UITableView Crash(EXC_BAD_ACCESS)第一部分插入,我实现了你在调用之前添加的以下解决方法[tableView beginUpdates];

if ([[NSProcessInfo processInfo] operatingSystemVersion].majorVersion >= 9)
{
    // there's a bug in iOS9 when your UITableView has no rows that causes endUpdates to crash with EXC_BAD_ACCESS
    // to work around this bug, you have to call tableView reloadData before calling beginUpdates.

    BOOL shouldReloadData = YES;
    NSInteger numberOfSections = [tableView.dataSource numberOfSectionsInTableView:tableView];
    for (NSInteger section = 0; section < numberOfSections; section++)
    {
        if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] > 0)
        {
            // found a row in current section, do not need to reload data
            shouldReloadData = NO;
            break;
        }
    }

    if (shouldReloadData) 
    {
        [tableView reloadData];
    }
}

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有