EXC_BAD_ACCESS
означает, что ваш делегат уже был освобожден, когда вы отправили ему сообщение didTouchImageView
(я предполагаю, что когда вы отправляете сообщение performSelector
, все в порядке, это будет слишком просто).
Прежде всего, проверьте управление сохранением / выпуском для вашего делегата, чтобы увидеть, есть ли что-то неправильное.
Если все кажется в порядке, одна из возможностей отладки - это включение зомби (вы можете сделать это через Инструменты / Выполнить с помощьюинструмента повышения производительности или путем установки переменной среды при отладке).
Это может помочь вам определить причину проблемы.
Если вам нужна дополнительная помощь, пожалуйста, опубликуйте код о том, как высоздайте / сохраните / освободите ваш объект делегата, а также вставьте трассировку стека сбоя.
РЕДАКТИРОВАТЬ:
Два совета:
ключработа с делегатами (без их сохранения) означает, что контроллер представления (который в вашем случае также является делегатом) живет дольше, чем invoiceTabImage
;Затем вы можете просмотреть жизненный цикл invoiceTabImage
(когда он создан / выпущен) и сравнить его с делегатом;
в dealloc
вашего контроллера, добавьте эту строку:
invoiceTabImage = nil
;
, так что вы гарантируете, что при удалении контроллера / делегата делегирующий объект знает, что делегата больше нет;программа не будет работать, но, возможно, не будет аварийно завершать работу.