2012-06-16 3 views
2

У меня есть окно и оконный контроллер, который открывается, когда пользователь нажимает кнопку. Иногда я получаю EXC_BAD_ACCESS (код = 1, адрес = 0x0).EXC_BAD_ACCESS (code = 1, address = 0x0) when runModalForWindow

0x7fff6f2a59e0: movq (%rax), %rdi 

Вот код:

ChooseProceduresWindowController *chooseProceduresWindowController = [[ChooseProceduresWindowController alloc] initWithWindowNibName:@"ChooseProceduresWindow"]; 
    [NSApp runModalForWindow:[chooseProceduresWindowController window]]; 

Ошибка возникает тогда runModalForWindow: называется. Я не получаю эту ошибку каждый раз, но я не мог найти шаблон.

Благодаря

+0

Оба окна гарантированно будут принадлежать ('сильно') на весь период действия модального действия? Непреднамеренные ранние выпуски ARC часто являются причиной исключений EXC_BAD_ACCESS', особенно в '0x0'. – Ephemera

ответ

1

Эта ошибка будет сгенерировано, когда объект не существует в памяти. Я бы начал искать проблемы с управлением памятью. Во-первых, убедитесь, что вы освобождаете SelectProceduresWindowController после его использования.

+0

Я получаю сообщение об ошибке перед выпуском, когда пытаюсь открыть его в модальном режиме. –

+0

Вы открываете его несколько раз и когда-либо делаете ошибку с первой попытки? –

+0

Да, я открываю его несколько раз, и нет, я не получил ошибку с первой попытки. –

3

лучший способ отладки EXC_BAD_ACCESS ошибки в использовании NSZombies.

Проверьте это видео для объяснения:

http://youtu.be/LQtPr8bkB3g

NSZombie сохраняет все объекты в памяти, когда вы пытаетесь освободить объект, который уже был освобожден, так что вы получите ближе к найти свою ошибку , Как сказал @Mark H, это проблема управления памятью.

Также вы можете поместить NSLog в свой метод dealloc, чтобы иметь лучшее представление о том, что становится освобожденным во время выполнения.

+0

Иногда объект, посреди которого освобождается, выбрасывает исключение «не отвечает на селектор». И иногда EXC_BAD_ACCESS происходит из-за чтения вне границ массива (seg fault), если я не ошибаюсь ... Но 'NSZombies' - хорошая мера для начала. –

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