iOS5 выдает ошибку EXC_BAD_ACCESS

#iphone #objective-c #ios5

#iPhone #objective-c #ios5

Вопрос:

У нас есть код Objective-C, который отлично работает во всех других версиях iOS, но теперь не работает с iOS5. Ниже приведен раздел сбоя кода, он останавливается в строке setSelectedCell с ‘EXC_BAD_ACCESS’

 -(void)viewWillAppear:(BOOL)animated {
    Application *app = [Application sharedManager];
    [app setSelectedCell:nil deselectedCell:[menuItemTableView 
                      cellForRowAtIndexPath:currentIndexPath]];
}
  

Как кто-нибудь сталкивался с этой ошибкой? Есть идеи, как исправить?

Спасибо!

Комментарии:

1. Какой тип sharedManager ?

Ответ №1:

Вероятно, ваша ошибка была в прошлых версиях и теперь просто лучше обнаруживается в iOS5. Самое важное, что нужно понимать об EXC_BAD_ACCESS, это то, что строка, в которой она обнаружена, может иметь или не иметь никакого отношения к коду, который ее вызывает.

Я подробно написал об этом здесь:

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

Там также есть советы по отладке, но для подведения итогов

  1. Выполните сборку и анализ — исправьте все, что видите
  2. Если вы считаете, что переиздаете, попробуйте включить zombies
  3. Debug Malloc может привести к возникновению ошибки ближе к причине

Повторюсь, то, что вы не получаете EXC_BAD_ACCESS, не означает, что у вас нет ошибки сбоя памяти — это просто означает, что она не была обнаружена системой подкачки виртуальной памяти / памяти.

Ответ №2:

Я не могу сказать из небольшого кода, который вы вставили, но это может быть проблема с автоматическим подсчетом ссылок (A.R.C.)

http://developer.apple.com/technologies/ios5/

Попробуйте отключить это в настройках сборки.

Ответ №3:

Если menuItemTable выпущен, но не имеет значения nil, это приведет к сбою приложения и выдаст вам EXC_BAD_ACCESS, поскольку вы отправляете сообщение чему-то, что не существует и не равно нулю.