2014-12-03 4 views
1

У меня застряла проблема, которая приводит к сбою моего кода в iOS 8. Он отлично работает на iOS 7, но по какой-то нечетной причине происходит сбой на iOS 8. Я отлаживал код, пока я не узнал, где он выходит из строя ... Это функция, в которой он выходит из строя:EXC_BAD_ACCESS (SIGSEGV) из-за таблицы setEditing

- (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

Это показывает, что приложение аварийно завершает работу при обнаружении кода: 0x1654 в прогонах dylib. Но когда я рассматриваю это в 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 Эта ошибка делает меня сумасшедшим.

+0

Ошибка SIGSEGV появляется, когда приложение пытается получить доступ к объекту, который уже освобожден. На мой взгляд, вы должны проверить жизненный цикл объекта tableView – MP23

+0

Но журнал показывает, что объект tableView все еще выделен и его значения регистрируются ... –

+1

Хм, тогда, возможно, что-то смешивается с делегатами. Я вижу, что вы переключаете делегаты - возможно ли, что вы можете попробовать запустить этот код без изменения делегата tableView? – MP23

ответ

0

Я переместил весь код, так что мне не нужно менять делегатов, как сказал @ MP23, и все это сработало^__^Он больше не сработает. Большое спасибо m8