这是我在 handleModuleReady 函数中遇到的错误:
[Fault] exception, information=TypeError: Error #1034: Type Coercion failed:
can not convert MyModule@39b8479 to IModuleInterface.
我有一个应用程序设置,我已经创建了在运行时加载的模块,以减少文件大小(因为大多数用户只需要其中一个模块)。
<!-- maker.mxml -->
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns="*"
layout="absolute"
creationComplete="init(event)">
<mx:Style source="css/maker.css" />
<mx:Script>
<![CDATA[
//Modules
import mx.events.ModuleEvent;
import mx.modules.ModuleLoader;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;
private var info:IModuleInfo;
...
private function init(e:Event):void {
info = ModuleManager.getModule("MyModule.swf");
info.addEventListener("ready", handleModuleReady);
info.addEventListener("error", handleModuleError);
info.load(ApplicationDomain.currentDomain);
}
private function handleModuleReady(moduleEvent:ModuleEvent):void {
var ichild:IModuleInterface = IModuleInterface(moduleEvent.target.factory.create());
if (ichild != null) {
//call class functions here via ichild object
}
else {
trace("Something has gone wrong.");
}
}
...
</mx:Script>
...
我创建了IModuleInterface类(IModuleInterface.as),并且MyModule.mxml文件编译没有问题,但我继续得到类型转换错误,尽管尝试了各种可能的解决方案,例如通过ModuleLoader,ModuleManager加载模块,最近设置了applicationDomain。
请告诉我你是否知道如何解决这个问题。互联网的其余部分没有。相信我,我看了。
如果相关,界面看起来像这样。
//IModuleInterface.as
package
{
public interface IModuleInterface {
function getSomeClass():Class;
function getSomeArray():Array;
function getSomeInt():int;
}
}
答案 0 :(得分:1)
首先,如果您想将ichild与null进行比较,则应使用as
进行投射:
var ichild:IModuleInterface = moduleEvent.target.factory.create() as IModuleInterface;
其次,你能否确认create()是返回模块的一个实例(而不是包装它的东西)?从错误的外观来看,它是。
假设它是,您的无包装接口可能是问题。将它放入一个包中,并确保主应用程序和模块都引用相同的接口接口。
让我知道这是怎么回事。
答案 1 :(得分:0)
我读错了这个问题
试试这个:
var module :IModuleInterface = evt.module.factory.create() as IModuleInterface;