我遇到了一个问题,导致我的代码在 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 这个错误让我抓狂。