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

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

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

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

Спасибо!


person BlueShoe    schedule 07.10.2011    source источник
comment
Какой тип sharedManager?   -  person FreeAsInBeer    schedule 07.10.2011


Ответы (3)


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

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

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

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

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

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

person Lou Franco    schedule 07.10.2011

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

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

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

person SK9    schedule 07.10.2011

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

person utahwithak    schedule 07.10.2011