EXC_BAD_ACCESS общего CALayer UIKit и QuartzCore

Я экспериментирую с ошибкой EXC_BAD_ACCESS, которую не могу решить, поэтому здесь я представляю ее вам в надежде получить помощь :)

Обычно я исправляю такие ошибки с помощью инструментов-зомби, но в этот раз это не кажется таким простым...

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

Любой намек? Спасибо!

URL-адрес изображения: https://i.stack.imgur.com/6R7f0.png введите здесь описание изображения


person Ricard Pérez del Campo    schedule 20.12.2012    source источник
comment
Недостаточно информации, чтобы сказать, в чем проблема, кроме того, что у вас есть освобожденный объект, на который все еще ссылаются. Убедитесь, что у вас есть надежные указатели на объекты, которые вы не хотите освобождать.   -  person Kekoa    schedule 21.12.2012
comment
Да, это то, что я проверил в первую очередь, но проект очень-очень большой и легко что-то забыть... Используя инструменты, я ожидал увидеть, какой из моих методов действительно освобождает объект, но я этого никогда не делал, поэтому Я чувствую себя таким сбитым с толку! Благодарю вас!   -  person Ricard Pérez del Campo    schedule 21.12.2012
comment
Вы используете несколько потоков?   -  person Lefteris    schedule 31.12.2012
comment
Да, я. Приложение использует несколько потоков для многих вещей, но я не могу знать, происходит ли ошибка в основном потоке или нет, верно? Ну, на самом деле я могу предположить, что это основной поток, потому что это что-то связанное с uikit, который всегда работает в основном потоке (я думаю).   -  person Ricard Pérez del Campo    schedule 31.12.2012
comment
При выполнении какого кода или действия вы получаете эту ошибку?? Вам нужно указать хотя бы это и указать, какой код приводит к этой ошибке.   -  person Dinesh Raja    schedule 07.01.2013


Ответы (2)


Поскольку вы говорите, что используете многопоточность, я уверен, что это ваша проблема:

UIKit, хотя и рекламируется как потокобезопасный, начиная с iOS4, не является полностью потокобезопасным. Он выполняет внутренние вызовы UIStringDrawing, что не является потокобезопасным, и в итоге вы получаете эти сбои. Посмотрите здесь: методы UIStringDrawing, похоже, не быть потокобезопасным в iOS 6

Вместо этого попробуйте нарисовать текст в CATextLayer.

person Lefteris    schedule 01.01.2013
comment
Это может быть связано с моей проблемой, но сейчас мне это не очень помогает... Мне нужно найти, где возникает проблема, поэтому я воспользуюсь вашим решением. Но сначала мне нужно найти часть моего кода, из-за которой он падает, и я просто не знаю, где искать. В любом случае большое спасибо! - person Ricard Pérez del Campo; 02.01.2013
comment
Если вы добавите точку останова исключения в Xcode, чтобы сломать все исключения и запустить приложение, оно должно остановиться в точке сбоя! - person Lefteris; 02.01.2013

Мне немного любопытно, почему и как вы используете общий CALayer? По моему опыту, работа с CALayers не требует больших затрат производительности, вы делите CALayer между двумя представлениями или что? В этом случае моя рекомендация и ответ заключались бы в том, чтобы не делиться им, а вместо этого иметь два CALayer. Если у вас нет варианта использования, который, конечно, хорош, но я не могу придумать ни одного.

Удачи!

person Anders    schedule 04.01.2013
comment
Я абсолютно не знаю, что происходило... Я не отвечал за этот слой (по крайней мере, так говорят приборы...). Я, наконец, переделал контроллер основного вида (где это произошло случайно), и теперь этого больше не происходит. - person Ricard Pérez del Campo; 05.01.2013