2013-09-26 3 views
0

У меня есть приложение, похожее на заметку: UITableViewController, показывающее отдельные заметки, нажимая их на стек навигации.Навигационная панель ios7 вызывает EXC_BAD_ACCESS после VC с показанной клавиатурой

Проблема возникает, когда у меня есть UITextView с статусом FirstResponder (отображается клавиатура), и я нажимаю кнопку «Назад». Текущий контроллер просмотра уволен с анимацией, как ожидалось, но теперь панель навигации нарушена! Если я нажму на любую из кнопок панели, это вызовет EXC_BAD_ACCESS.

Я бы сказал, что он не перешел должным образом. Стол VC тоже сломан, так как он может казаться пустым при дальнейших манипуляциях ... Очень странное поведение!

Кстати, это не вызывало никаких проблем с iOS5 и iOS6, но там я использовал пользовательскую кнопку возврата chevron.

Я проверил стандартное приложение Notes и работает как шарм. Что это за трюк?

Большое спасибо за ваш совет!

+0

Пожалуйста, обратите внимание на некоторый код вместе с журналом сбоев. – null

+0

После некоторого отслеживания я обнаружил, что методы UITableViewController viewWillAppear: и viewDidAppear: методы не запускаются после перехода к нему с активной клавиатурой. Почему это может быть? –

+0

мм, был ли установлен делегат диспетчера навигации? – null

ответ

0

я получил его, и будет пытаться объяснить, чтобы помочь кому-то еще, чтобы спасти свой день ...

EXC_BAD_ACCESS был поднят, потому что UITableViewController не был должным образом переведены на во время Назад поп-анимации (его viewWillAppear: и viewDidAppear: метод не срабатывает вообще). В свою очередь анимация не была выполнена должным образом, так как popViewControllerAnimated: был вызван дважды или даже больше раз: 1) как часть обратного вызова обратной связи; 2) внутри textViewDidEndEditing: в случае, если текст не был введен.

Решение состоит в том, чтобы проверить, была ли нажата кнопка «Назад» до вызова popViewControllerAnimated:. Хитрость заключается в проверке, находится ли контроллер подробного представления в стеке навигации. Вот вспомогательный метод:

-(void) returnToTheListOfRecords { 
    self.textView.delegate = nil; // this is to avoid the second call of `textViewDidEndEditing:` 
    if ([self.navigationController.viewControllers indexOfObject:self.delegate]==NSNotFound) { 
     // Back button has been pressed. 
    } else { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

Проблема происходит на iOS7 только благодаря своей совершенно новой анимации.

0

EXC_BAD_ACCESS означает, что вы пытаетесь получить доступ к объекту, который был освобожден. Лучшее, что вы можете сделать, чтобы проследить это, это позволить NSZombie, он скажет вам, какой выпущенный объект отправляется сообщение (aka EXC_BAD_ACCESS).

Вы можете получить, как включить его с here.

+0

Я понимаю, почему EXC_BAD_ACCESS поднят и что вызывает его, как я сказал ранее в комментарии. 'popViewControllerAnimated:' вызывается дважды (от кнопки «Назад» от системы и от «textViewDidEndEditing:').Я просто не знаю, как правильно его обрабатывать, как проверить, не активирована ли анимация с обратной связью ... –

+0

Попробуйте [textView resignFirstResponder]; в вашем представленииWillDisapear, если ничего не произошло, отредактируйте свой вопрос и разместите свой код. – null

+0

К сожалению, это не помогло. Но я нашел решение! Я отвечу на мой вопрос. Большое спасибо за ваш совет. –

Смежные вопросы