0

我正在使用 Flex SDK 4.6,当我尝试在舞台上添加 spark 复选框时出现非常奇怪的错误:

var cb:CheckBox = new CheckBox();
optionsList.addElement(cb);

TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 spark.skins.mobile::CheckBoxSkin/drawBackground()[E:\dev\4.y\frameworks\projects\mobiletheme\src\spark\skins\mobile\CheckBoxSkin.as:162] 在 spark.skins.mobile。 supportClasses::MobileSkin/updateDisplayList()[E:\dev\4.y\frameworks\projects\mobiletheme\src\spark\skins\mobile\supportClasses\MobileSkin.as:313] 在 mx.core::UIComponent/validateDisplayList( )[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:8999] 在 mx.managers::LayoutManager/validateDisplayList()[E:\dev\4.y\ frameworks\projects\framework\src\mx\managers\LayoutManager.as:736] 在 mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers \LayoutManager.as:819] 在 mx.managers::

在 MXML 中创建 chechbox 时没有问题,但我需要在 AS 中创建多个实例,然后将它们添加到阶段。

有人知道我做错了什么吗?

4

1 回答 1

1

我发帖是为了澄清评论中的一个误解,我相信这是错误的根源。去引用:

当我在 creationComplete 上添加复选框时,我检查了它是否有效,但在我的情况下,复选框是在调用 updateDisplayList 时在 creationComplete 之后添加的。

updateDisplayList() 在组件的生命周期中可能会被调用很多次。每次屏幕上的某些内容需要自我更新时都会调用它。updateDisplayList() 在调用 creationComplete 事件之前至少被调用一次,但是在某些情况下,对于某些组件,它可能会被调用更多次。

您共享的代码有点脱离上下文,但是您最终会得到很多复选框;因为每次 updateDisplayList() 迭代后都会创建一个新的复选框。我强烈建议您将孩子的创建移至 createChildren() 方法,而不是 updateDisplayList()。

这里有一些关于Spark Flex Component LifeCycle的文档和一些关于MX Component LifeCycle的文档。

于 2012-05-14T15:41:14.963 回答