在加载多个Module时出现了类型转换展示,信息如下:
TypeError: Error #1034: 强制转换类型失败:无法将 mx.managers::DragManagerImpl@3a37291 转换为 mx.managers.IDragManager。
两个解决方案的文章,其中第一个里面解释的比较详细
一个Module反复加载触发的dragManager错误及解决办法
为防止以上的帖子被删除,特摘其中的解释部分如下
这属于Module的共享代码问题(shared code),
当Module中使用managers时(如PopUpManager,DragManager, HistoryManager)容易出现这个问题,
manager的方法都是静态方法,整个应用程序中创建了一个该manager接口的singleton,
但module仅在自己的Application domain中使用该singleton, 当多个module使用同一个singleton且main
application没有使用时,就会出现这个空对象引用问题:首先引入某manager的module不能将该manager接口的singleton跟其
他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个module就无法引用到该manager接口的实例,就出现了空对象引用问题,可以参考Flex的源码。
默认情况下,Accordion和TabNavigator的 historyManagementEnabled =
true;而ViewStack的historyManagementEnabled = false;
所以使用TabNavigator和Accordion时要注意HistoryManager的共享代码问题。另,仅一个module使用HistoryManager时,卸载之后又加载该module也会出现该问题,说明第二次加载时相当于一个新的module了。
一个解决办法:
在main application 中引入相关manager,可以通过在main application中申明manager的引用即可,如:
import mx.managers.HistoryManager;
var historyManager:HistoryManager;
其他manager类似。
还可以将共享代码作为module加载到main applicaiton的application domain,具体讲解可以参考Alex
Harui的ppt:
http://blogs.adobe.com/aharui/presentations/ 下面关于module的presentation, 讲得很详细。
以上就是其中的解释部分,仅供参考