PDA

Просмотр полной версии : Ошибка Coercion внутри библиотечного клипа


mikhailk
26.09.2011, 17:35
Есть библиотечные мувиклипы ClipA и ClipB. ClipB вложен в ClipA и имеет инстанснэйм сlipВ. Библиотека (файл swf) подгружается на этапе выполнения стандартным образом (libraries - массив библиотек):


libraries[libraryIndex] = loader.contentLoaderInfo.applicationDomain.getDefinition;


Потом объект класса ClipA создается следующим образом:


var objectClass:Class = libraries[libraryIndex]("ClipA") as Class;
var object:Object = new objectClass;


Все работает и objectClass==[class ClipA] , однако периодически вылетает эксепшн:
Error #1034: Ошибка типа Coercion: невозможно преобразовать flash.display::MovieClip@94ee4a1 в ClipB.

Кто сталкивался и как победить?

Добавлено через 11 минут
getStackTrace():


Error #1034: Ошибка типа Coercion: невозможно преобразовать flash.display::MovieClip@8a040f9 в ClipB.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at ClipA()

-De-
26.09.2011, 18:24
Не понятно. instance name не имеет никакого отношения к имени класса. Т.е. если там мувик с именем ClipB, то он не обязан приводиться к типу ClipB.

mikhailk
26.09.2011, 18:39
Инстанстэйм действительно ни при чем.
После перекомпиляции библиотеки проблема вроде исчезла, но немного смущает плавающий характер.

Да, забыл сказать, проявляется только при запуске из под FD.

Добавлено через 49 часов 54 минуты
Опубликую результат локализации (вдруг кто столкнется).

1. Опытным путем выяснилось, что ошибка возникала только в дебагплеерах (пробовал 10.1-10.3), при этом при показе через браузер ошибки не происходило.

2. Ошибка возникала, когда вложенный клип (в примере - ClipB) имел класс и настройки "Эскпорт для ActionScript в первый кадр". Соответственно, там где вложенным клипам классы для доступа из кода не нужны, я эти классы убрал, а там, где нужны, сдублировал вложенные клипы - т.е. ClipB остался для доступа из кода, а ClipBInsider без класса - заменил ClipB внутри ClipA.