EXC_BAD_ACCESS(SIGSEGV)由于表setEditing

时间:2014-12-03 11:45:31

标签: ios uitableview exc-bad-access theos setediting

我一直遇到一个导致我的代码在iOS 8上崩溃的问题。它在iOS 7上工作正常但是由于一些奇怪的原因在iOS 8上崩溃了。我调试了代码,直到找到崩溃的地方......这是它崩溃的功能:

- (void)reloadData
{
    NSLog(@"BPT:\nreloadData Start");
    oldDelegate = tableView.delegate;
    tableView.delegate = self;

    NSLog(@"BPT:\ntable: %@", tableView);
    NSLog(@"BPT:\nreloadData 1");
    [tableView setEditing:YES animated:YES];
    NSLog(@"BPT:\nreloadData End");
}

它崩溃了:

[tableView setEditing:YES animated:YES];

这是日志:

BPT:
reloadData Start
BPT:nreloadData 1
BPT:
table: <UITableView: 0x169f1800; frame = (0 0; 308 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d9b6c0>; layer = <CALayer: 0x15d9a260>; contentOffset: {0, -323.5}; contentSize: {308, 4255.5}>
BPT:
reloadData 1
Dec 2 22:09:35 ReportCrash[13733]...

这是崩溃报告:https://ghostbin.com/paste/2sq95

它显示当dylib中的代码:0x1654运行时,应用程序崩溃。但是当我在IDA中看到这一点时,我就会发现:

__text:0000172C sub_172C
__text:0000172C
__text:0000172C var_8           = -8
__text:0000172C var_4           = -4
__text:0000172C
__text:0000172C                 STR             R12, [SP,#var_4]!
__text:00001730                 LDR             R12, =(off_46D8 - 0x173C)
__text:00001734                 LDR             R12, [PC,R12] ; off_46D8
__text:00001738                 STR             R12, [SP,#4+var_8]!
__text:0000173C                 LDR             R12, =(unk_4000 - 0x1748)
__text:00001740                 LDR             PC, [PC,R12]
__text:00001740 ; End of function sub_172C

此功能根本没有任何外部参照!它也不是初始化器,导致代码正确初始化...任何帮助都会非常感激...为什么:[tableView setEditing:YES animated:YES];导致iOS 8而不是iOS 7 OO崩溃这个错误让我发疯。

1 个答案:

答案 0 :(得分:0)

我移动了整个代码,以便我不必像@ MP23那样更改代理,这一切都有效^ __ ^它不再崩溃。非常感谢m8