Flex TypeError: Error #1034: 类型转换失败

TypeError: Error #1034: 強制型変換に失敗しました。jp.co.nec.necst.pi.ap2web::TestEvent@1645ee79 を jp.co.nec.necst.pi.ap2web.TestEvent に変換できません。
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispatchEvent()
 at mx.core::UIComponent/dispatchEvent()[E:/dev/3.1.0/frameworks/projects/framework/src/mx/core/UIComponent.as:9156]
 at UserDetail/navToUserSet()[D:/program/eclipse/workspace/netboard/flex_src/UserDetail.mxml:190]
 at UserDetail/___UserDetail_Button3_click()[D:/program/eclipse/workspace/netboard/flex_src/UserDetail.mxml:305]

这两天做flex碰到上面这个问题,主要是Flex模块通过事件传值时发生了这个错误,调试了半天发现dispatchEvent(event)的时候出现,

但一直找不到解决办法,TestEvent是自己定义的事件,自己转换自己还转换不了,郁闷到挂!

 

后来无奈换了另一种方法传值,成功传值,但是点下拉框时又发生DragManagerImpl@12631a61转换为 mx.managers.IDragManager报错,上Google搜索了下,找到了解决办法,发现同我前一个问题类似,于是用同样

方法,一试果然成功。

 

以下是解决办法:

 

在主应用(Application)里面加上
import mx.managers.DragManager;
private var dragManager:DragManager;
这两句就可以解决问题。至于为什么会出现这样的情况,在网上找到别人的解释,以下是转自google一个flex 讨论组别人的回答(http: //groups.google.com/group/riadev/tree/browse_frm/month/2007-05/5eeebf64e4926c45? rnum=11&_done=%2Fgroup%2Friadev%2Fbrowse_frm%2Fmonth%2F2007-05%3F)

QUOTE:

这属于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, 讲得很详细

第二个是答案是类似的:

Hello following code in your main application

        import mx.Managers.*;
        private var _dragManager:DragManager;
        private var _historyManager:HistoryManager;
        private var _popupManager:PopUpManager;
 

-reply by Pradip Jadhav

 

于是在主应用(Application)里面加上以下两句就OK了:

import jp.co.nec.necst.pi.ap2web.TestEvent;

private var testEvent:TestEvent;

为毛啊,为毛困扰了俺这么久的问题这么简单就能解决,为毛啊!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 这个错误提示是说,zip函数的第二个参数必须支持迭代,也就是说必须是一个可迭代对象。如果你传入的参数不支持迭代,就会出现这个错误。你需要检查一下你传入的参数是否是一个可迭代对象,如果不是,就需要将其转换成可迭代对象,或者使用其他函数来处理。 ### 回答2: 必须是迭代器,而不是int 在Python编程中,zip()是一个内置函数,用于同时遍历多个序列。zip()函数接收任意数量的可迭代对象(包括序列、元组和字符串),并返回一个元素为元祖的迭代器,其中每个元素包含所有输入迭代器的并行元素。 当我们将zip()函数用于不同类型的可迭代对象时,它可能会产生类型错误,其中一个常见的错误是“TypeError: zip argument # must support iteration”。 这个错误通常是由于将int类型的对象作为zip()函数的参数而不是迭代器或其他可迭代对象引起的。因为int类型的对象不支持迭代,所以它们不能作为zip()函数的参数传递。 例如,在下面的示例中,我们将整数1和2作为参数传递给zip()函数: a = [1, 2, 3] b = zip(1, 2) print(list(b)) 当我们尝试运行这个代码时,它会引发“TypeError: zip argument # must support iteration”错误消息。 这时,我们需要检查我们传递给zip()函数的参数类型并确保它们是可迭代的。如果参数类型是int,则需要在调用zip()函数之前将其转换为可迭代的对象。一种方法是将int类型的对象转换为列表,例如: a = [1, 2, 3] b = zip(list(range(1,3)), a) print(list(b)) 在这个示例中,我们将整数1和2转换为列表,然后将它们传递给zip()函数。现在,这个示例可以正常运行,不会引发类型错误。 ### 回答3: 类型错误:zip参数 这个错误通常发生在使用Python内置的zip函数时,其中一个参数不符合要求。具体来说,zip函数的作用是将多个序列按照索引打包成元组,返回一个可迭代对象。例如: ``` >>> a = [1, 2, 3] >>> b = ["a", "b", "c"] >>> c = ["x", "y", "z"] >>> zip(a, b, c) <zip object at 0x7f7b19bca940> >>> list(zip(a, b, c)) [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')] ``` 如果使用zip函数时出现类型错误,一般有以下几种情况: 1. 参数数量不一致 zip的参数应该是多个序列,它们的长度必须相等。如果有一个序列长度不一致,就会出现类型错误: ``` >>> a = [1, 2, 3] >>> b = ["a", "b"] >>> zip(a, b) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: zip argument #2 must support iteration ``` 2. 参数类型不一致 zip的参数可以是任意可迭代对象,但是它们的元素类型必须一致。如果有一个参数的类型不正确,就会出现类型错误: ``` >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = "xyz" >>> zip(a, b, c) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object cannot be interpreted as an integer ``` 3. 参数为空 如果传递的参数为空序列或空迭代器,那么zip函数返回空,而不是抛出类型错误: ``` >>> a = [] >>> b = [] >>> zip(a, b) <zip object at 0x7f7b19be17c0> >>> list(zip(a, b)) [] ``` 综上所述,要避免类型错误:zip参数,需要确保传递给zip函数的参数数量相等、元素类型一致,并且不为空。如果不确定某个参数是否符合要求,可以使用type函数进行检查。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值