EXC_BAD_ACCESS Исключение в iPhone - PullRequest
       0

EXC_BAD_ACCESS Исключение в iPhone

1 голос
/ 24 августа 2010

Я получил этот кусок кода:

- (void)postToWall {

FBStreamDialog *dialog = [[FBStreamDialog alloc] init];
dialog.userMessagePrompt = @"Un tuo commento:";
dialog.attachment = [NSString stringWithFormat:@"{\"name\":\"Bla: %@\"", facebookName];
[dialog show];

[dialog release];
}

при первом запуске все работает нормально, без проблем. Но если я отправляю или пропускаю, а затем снова публикую, я получаю EXC_BAD_ACCESS из-за facebookName. Консоль не показывает ошибок, я нашел ее через DebugConsole. Я действительно не знаю, почему это происходит, кто-то может помочь?

РЕДАКТИРОВАТЬ: РЕШЕНО !!! В других частях кода я получил доступ к строке facebookName по ее имени. Это, по-видимому, приводит к сбою, поэтому я синтезировал его и затем получил к нему доступ через «self.facebookName».

Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Вы должны показать контекстный код относительно facebookName.

Я думаю, возможно, он выйдет к тому времени, когда вы снова его используете. Просто чтобы быть в безопасности, вы можете попробовать [facebookName retain] в начале метода, а затем [facebookName release] в конце, чтобы показать, что вам нужно держаться за объект, чтобы выполнить некоторую работу.

Да, использование синтезированного свойства автоматически сохраняет объекты при их назначении (при условии, что у вас обычное значение, (nonatomic, retain)). Раньше он не сохранялся, поэтому к тому времени, когда вы снова использовали его пару раз, вы получите EXC_BAD_ACCESS, так как он больше не существует (был выпущен к тому времени, опять же, он не был сохранен).

1 голос
/ 24 августа 2010

Вероятно, вы не получите правильную трассировку стека во время сбоя.

Самый быстрый способ отследить истинную причину EXC_BAD_ACCESS - использовать исполняемый аргумент NSZombieEnabled, а затем установить точку останова на objc_exception_throw. Это даст вам трассировку стека и позволит вам точно определить, к какому объекту вы пытаетесь получить доступ.

http://www.cocoadev.com/index.pl?NSZombieEnabled

Использование Malloc для отладки

...