加载外部SWF,无法将文档类转换为共享基类

时间:2009-10-12 05:22:06

标签: casting flash-cs3 loader swfloader applicationdomain

我有一个定义Widget基类的父SWF文件。

然后我将外部SWF加载到父级中。外部SWF的文档类派生自Widget基类 - 例如,我们称之为DerivedWidget。

问题是当我加载外部SWF时,我无法将Loader.content(在调试器中显示为具有DerivedWidget类型)转换为Widget类型。我使用“as”运算符在加载完成后将内容强制转换为父SWF中的Widget,但转换结果为“null”。

这种行为是不期望的,因为外部SWF被加载到父的应用程序域中,并且Loader的内容在调试器中显示为DerivedWidget,我知道它来自Widget,但是对基础Widget类的强制转换是失败的

任何人都可以解释这种意外行为并提供解决方案吗?

[编辑:回顾一下之前的代码快照...这之前有效,但现在不是......并且加载和转换代码没有改变]

[编辑2:实际上,在Flash IDE中调试时似乎失败了。正常运行时,所有内容都加载到正确的ApplicationDomain中(sameDomain = true);这显然是一个巨大的错误]

2 个答案:

答案 0 :(得分:0)

DocumentClass继承的方式存在一些错误。

http://bugs.adobe.com/jira/browse/FP-2999(需要登录adobe的bug追踪器)

我的建议是将它从舞台上取下并通过图书馆导出,它将从那里开始工作。事实上,我的经验法则是“永远不要使用文档类。”

答案 1 :(得分:0)

我遇到过类似的问题。解决方案有两个方面。

  1. 使用DerivedWidget(mc)代替mc as DerivedWidget。有一些文章解决了这个问题,你需要找到它。

  2. 确保在两个编译环境中都可以访问类DerivedWidget。如果您使用Module或invovle不同的Flash域,请更加小心。