Загрузка внешнего SWF-файла, невозможно преобразовать класс документа в общий базовый класс

У меня есть родительский SWF-файл, который определяет базовый класс виджета.

Затем я загружаю внешний SWF в родительский. Класс внешнего SWF-документа является производным от базового класса Widget - назовем его, например, DerivedWidget.

Проблема в том, что когда я загружаю внешний SWF, я не могу преобразовать Loader.content (отображается в отладчике как имеющий тип DerivedWidget) к типу Widget. Я использую оператор «as» для преобразования содержимого как виджета в родительский SWF-файл после завершения загрузки, но приведение приводит к «null».

Такое поведение не ожидается, поскольку внешний SWF загружается в домен родительского приложения, а содержимое загрузчика отображается в отладчике как DerivedWidget, который, как я знаю, является производным от Widget, но приведение к базовому классу Widget не удается.

Может ли кто-нибудь объяснить это неожиданное поведение и предложить решение?

[Edit: оглядываясь на более ранний снимок кода ... это работало раньше, но теперь это не так ... и код загрузки и преобразования не изменился]

[Edit2: на самом деле, похоже, что при отладке во Flash IDE происходит сбой. При обычном запуске все загружается в правильный ApplicationDomain (sameDomain = true); это, очевидно, огромная ошибка]


person Triynko    schedule 12.10.2009    source источник


Ответы (2)


В способе наследования DocumentClass есть несколько ошибок.

http://bugs.adobe.com/jira/browse/FP-2999 (необходимо войти в систему отслеживания ошибок Adobe)

Я рекомендую снять его со сцены и вместо этого экспортировать через библиотеку, оттуда он будет работать. Фактически, мое практическое правило - «никогда не использовать классы документов».

person Nate Austin    schedule 02.12.2009
comment
Я отказался от загрузки чего-либо внешнего во Flash. Flash Player 9 бесполезен для загрузки внешнего содержимого AS3, потому что его невозможно выгрузить, особенно для чего-то вроде анимации Adobe Captivate. Использование памяти постепенно увеличивается по мере перезагрузки содержимого. API диспетчеризации событий отстой, предотвращает сборку мусора и не позволяет мне проверять произвольные существующие события и ссылки на функции. Школы, с которыми мы работаем, меняют образы своих компьютеров только раз в год, поэтому тысячи пользователей застряли на Flash Player 9. Я не могу оправдать оплату этого программного обеспечения; это не работает так, как рекламируется. - person Triynko; 03.12.2009

У меня была аналогичная проблема. Решение двоякое.

  1. Используйте DerivedWidget(mc) вместо mc as DerivedWidget. Есть несколько статей, посвященных этой проблеме, вам нужно это выяснить.

  2. убедитесь, что класс DerivedWidget доступен в обеих средах компиляции. Если вы используете модуль или вызываете другой домен Flash, будьте осторожны.

person Juguang    schedule 14.12.2009