Flex:Module里包含TabNavigator时,卸载再加载时出现错误

     在Module里包含TabNavigator时,卸载再加载会出现错误,这是因为Module的共享代码问题,当Moduel中使用Managers(如PopUpManager、DragManager,HistoryManager)时,容易出现这个问题,Manager的方法都是静态方法,整个应用程序中创建了一个该Manager接口的单列Singleton,但Module仅在自己的Application domain中使用该Singleton,当多个Moduel使用同一个Singleton且Mian Application没有使用是,就会出现这个空对象引用的问题:首先引入某Manager的Module不能将该Manager接口的Singleton跟其他Module共享,其他Module调用该Manager的方法时,应用程序不会再创建该Manager接口的实例,这个Module就无法引用到该Manager接口的实例,就出现了空对象引用问题。

     默认情况下,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;

posted @ 2010-09-15 22:17  Asharp  阅读(865)  评论(0编辑  收藏  举报