EXC_BAD_ACCESS использует ARC и не может отслеживать на симуляторе

Я создавал приложение для клиента, и все шло гладко, пока я не начал получать эту ошибку. Это уникальная ситуация, я научился пользоваться инструментами и NSZombie, однако я не могу запускать инструменты с NSZombieEnabled на iPhone только на симуляторе. Я должен отладить эту проблему в iPhone, потому что я использую UIImagePicker, чтобы сделать снимок, и ошибка происходит вскоре после того, как я делаю снимок. Я также использую ARC, поэтому я вообще не могу устанавливать релиз или сохранять информацию, ARC запрещает это, поэтому я сомневаюсь, что это двойной релиз или что-то в этом роде. Есть 2 возможных ответа на этот вопрос.

1: Кто-нибудь знает, могу ли я передать изображение в UIImagePicker с помощью фотобудки? Я мог бы использовать инструменты и NSZombie, если бы я мог пройти мимо экрана камеры.

2: есть ли способ определить, какая строка будет причиной ошибки, без рефакторинга или комментирования кода с помощью iPhone? Кто-нибудь знает эффективный способ отследить bad_acces на iPhone?

Имейте в виду, я использую ARC и не могу отладить это на симуляторе. Если я удалю сценарий управления UIImagePicker, ошибка не произойдет, поэтому я сузил ее до чего-то в своем классе CameraViewController. Боюсь, я не могу опубликовать какой-либо код из-за ранее существовавшего контракта, вы должны быть сотрудником, чтобы просмотреть исходный код.

Извините за ограниченную информацию, но на самом деле я ищу ответ об отладке, а не о прямом решении моей проблемы с точным кодом.

Собираюсь опубликовать обратную трассировку (я думаю)

(gdb) bt
#0  0x339737e4 in objc_msgSend ()
#1  0x31b30140 in -[UIApplication sendAction:to:from:forEvent:] ()
#2  0x31b300e0 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#3  0x31b300b2 in -[UIControl sendAction:to:forEvent:] ()
#4  0x31b2fe04 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#5  0x31b30452 in -[UIControl touchesEnded:withEvent:] ()
#6  0x31b2eddc in -[UIWindow _sendTouchesForEvent:] ()
#7  0x31b2e756 in -[UIWindow sendEvent:] ()
#8  0x31b299fe in -[UIApplication sendEvent:] ()
#9  0x31b29336 in _UIApplicationHandleEvent ()
#10 0x3026c04a in PurpleEventCallback ()
#11 0x3443fce2 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#12 0x3443fca6 in __CFRunLoopDoSource1 ()
#13 0x3443256c in __CFRunLoopRun ()
#14 0x34432276 in CFRunLoopRunSpecific ()
#15 0x3443217e in CFRunLoopRunInMode ()
#16 0x3026b5f2 in GSEventRunModal ()
#17 0x3026b69e in GSEventRun ()
#18 0x31ad0122 in -[UIApplication _run] ()
#19 0x31ace12e in UIApplicationMain ()
#20 0x000034ce in main (argc=1, argv=0x2ffff75c) at /Users/Andrew/Documents/Developing/Xcode Projects/ProjectSVN/Project/trunk/ProjectInterface/ProjectInterface/main.m:16

2 ответа

Решение

Без примеров кода трудно сказать, однако ARC не полностью охватывает все ваши базы. Например, можно получить эти ошибки EXC_BAD_ACCESS, когда объекты (классы с делегатами) не существуют, но пытаются выполнить методы делегата обратного вызова.

Чтобы быть более конкретным, скажем, я создал класс в viewDidLoad: - давайте назовем это ClassA, В моей гипотетической ситуации я установил свой контроллер вида на ClassAделегат. Тем не менее, я не объявил недвижимость для ClassAпоэтому нет ссылки на него за рамками viewDidLoad:,

Теперь давайте предположим, ClassA объявить метод делегата, который реализован моим контроллером представления. Этот делегат передает ссылку на себя обратно в контроллер представления в этом методе делегата. Поскольку это может или не может быть вне области этой точки, БУМ, ошибка неверного доступа. Проверьте на такие вещи, где объекты больше не существуют и передаются другим методам - ​​это один из способов, которым ARC может вас подвести;)

EXC_BAD_ACCESS не обязательно означает проблему управления памятью. Это также легко может быть вызвано повреждением памяти или другими видами ошибок.

Опубликовать обратный след аварии.

Другие вопросы по тегам