Подтвердить что ты не робот

Reg: модифицирующий слой, который завершается....... [CALayer frame]: сообщение отправлено на освобожденный экземпляр 0xe43c520

Я застрял в очень странной проблеме. Я надеюсь, что многие из вас могут предоставить мне информацию для решения этой проблемы. Мое приложение ломается довольно часто, но я не могу получить точный сценарий.

В журнале я получаю следующее

2011-02-10 16:22:12.914 RCA-iOS[4132:8327] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.253 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.272 RCA-iOS[4132:207] *** -[CALayer frame]: message sent to deallocated instance 0xe43c520

Ниже приводится моя трассировка стека. Он разбивается в основном потоке

#0  0x01978057 in ___forwarding___
#1  0x01a07b42 in __forwarding_prep_1___
#2  0x003c196a in -[UIView(Geometry) frame]
#3  0x003f5ff4 in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:forItemAtIndex:]
#4  0x003e5cab in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:]
#5  0x003f0c06 in __-[UINavigationBar layoutSubviews]_block_invoke_1
#6  0x003bdb5c in +[UIView(Animation) _performWithoutAnimation:]
#7  0x003f76bb in -[UINavigationBar layoutSubviews]
#8  0x00f59451 in -[CALayer layoutSublayers]
#9  0x00f5917c in CALayerLayoutIfNeeded
#10 0x00f5237c in CA::Context::commit_transaction
#11 0x00f520d0 in CA::Transaction::commit
#12 0x00f827d5 in CA::Transaction::observer_callback
#13 0x019e7fbb in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
#14 0x0197d0e7 in __CFRunLoopDoObservers
#15 0x01945bd7 in __CFRunLoopRun
#16 0x01945240 in CFRunLoopRunSpecific
#17 0x01945161 in CFRunLoopRunInMode
#18 0x02129268 in GSEventRunModal
#19 0x0212932d in GSEventRun
#20 0x0039e42e in UIApplicationMain
#21 0x00001fd0 in main at main.m:14

И вот результат инструмента для объекта NSZombie. Это указывает на UIKit

#   Category    Event Type  RefCt   Timestamp   Address Size    Responsible Library Responsible Caller
0   CALayer Malloc  1   25304068864 0x10837840  48  UIKit   -[UIView _createLayerWithFrame:]
1   CALayer Zombie  -1  99780847872 0x10837840  0   UIKit   -[UIView(Geometry) frame]

Ничего не указывает на код. Кто-нибудь сталкивался с такой проблемой? Если да, пожалуйста, дайте мне знать следующие
<Б > 1) Когда мы получаем "Модифицирующий слой, который завершается", проблема с устранением?
2) Является ли это результатом слоя UIView? Например (view.layer.cornerRadius)?
3) Stack Trace указывает на UINAvigationBar, есть ли способ переопределить методы и попробовать что-то?

Любая помощь приветствуется. Спасибо

4b9b3361

Ответ 1

Ошибка "modifying layer that is being finalized" возникает, когда вы пытаетесь изменить свойства CALayer, когда он находится в процессе освобождения. Я видел, как это произошло, когда я случайно использовал аксессуар, чтобы очистить свойство на CALayer, находясь внутри этого метода -dealloc.

Это может также произойти в методе UIView -dealloc, если что-то связанное с отображением обновляется (таким образом, касаясь базового CALayer).

В вашем случае, похоже, вы где-то перевыполняете UIView, из-за сообщения зомби. "modifying layer that is being finalized" является лишь побочным эффектом этого, потому что в какой-то момент вы будете обновлять UIView, пока он будет освобожден до того, как он это сделает.

Включите контрольные точки, убедитесь, что вы установили точку останова при выбрасываемых исключениях и запустили приложение в отладчике. Он должен останавливаться на строке, где сообщение отправляется на переопределенный UIView, который должен сообщить вам, какой вид находится в центре этого. Затем вы можете отступить, чтобы найти, в какой момент вы отправляете слишком много сообщений о выпуске (или автореализовываться без сохранения, если вам нужно это за пределами текущей области).

Поскольку у вас уже есть доказательства, указывающие на UINavigationBar, проверьте его и связанные с ним представления, чтобы убедиться, что вы его правильно сохраняете.

Ответ 2

Я получил эту ошибку, когда случайно пытался освободить объект, который не должен был быть выпущен, в сочетании с его использованием для блока анимации UIView. Исправление, из-за чего проблема исчезла.

Ответ 3

@MegaMind. Я также застрял в этой проблеме "модифицирующий слой, который завершается", из-за чего приложение закрывается, но я могу решить эту проблему. Я думаю, что вы выпускаете любой объект, который вызывается при появлении UIView.

Ответ 4

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

Ответ 5

Чтобы помочь noobs (как я), которые не видят ничего плохого в своей памяти. Упр,

Я также получил эту ошибку, потому что ошибочно использовал "присваивание" в свойстве IBOutlet, которое должно было иметь "сохранить" на нем. Будьте осторожны, когда вы копируете-вставляете!

Ответ 6

Получил эту ошибку, когда я нажал на UIButton. Самое смешное, что в UIbutton ничего не случилось, но на самом деле в одном из подзонов под кнопкой. Я нашел subview, который имел и дополнительный релиз на нем.