【发布时间】:2015-05-07 00:08:44
【问题描述】:
我之前看到过这个错误,通常是当我们试图为解释器尚未看到的对象调用构造函数时。很可能是实例化的动态尝试。但是,我目前仅在 Android 设备上的执行行中遇到错误。
参见下面的有罪功能 -
public class XMLBuilder
{
private var elementClasses:Dictionary;
private var elements:Dictionary;
public function XMLBuilder()
{
elementClasses = new Dictionary();
elements = new Dictionary();
}
public function buildFromXML(xml:XML):void
{
elements = new Dictionary();
var element:StardustElement;
var node:XML;
for each (node in xml.*.*) {
//error thrown on line below//
element = StardustElement(new elementClasses[node.name()] ());
if (elements[node.@name] != undefined) {
throw new DuplicateElementNameError("Duplicate element name: " + node.@name, node.@name, elements[node.@name], element);
}
elements[node.@name.toString()] = element;
}
for each (node in xml.*.*) {
element = StardustElement(elements[node.@name.toString()]);
element.parseXML(node, this);
}
}
public function registerClass(elementClass:Class):void {
var element:StardustElement = StardustElement(new elementClass());
if (!element) {
throw new IllegalOperationError("The class is not a subclass of the StardustElement class.");
}
if (elementClasses[element.getXMLTagName()] != undefined) {
throw new IllegalOperationError("This element class name is already registered: " + element.getXMLTagName());
}
elementClasses[element.getXMLTagName()] = elementClass;
}
}
对象“elementClasses”是一个包含一组类的字典。 (在这种情况下,我已经在 iOS 和 Android 上进行调试时进行了检查)。并且评估 'elementClasses[node.name()] is Class' 返回 true。
有人知道 AIR 中的任何怪癖会导致这种情况仅在 Android 上发生吗?或者这个函数中有什么跳出来的?
【问题讨论】:
-
也许只是将其分解并首先存储在变量中,然后将所有内容放在一起。
-
我所拥有的解决方法的主要思想是某种引导程序,其中可以通过此函数实例化的每个可能的类在应用程序启动期间实例化一次。确保解释器在执行此函数之前知道它的构造函数。
-
但是,这仍然不能真正解释为什么这在 iOS 上很好,但在 Android 上会抛出错误。
-
请贴出
elementClasses的声明/定义,trace(elementClasses[node.name()])的结果是什么?trace(node.name())的结果是什么? -
更新了原始代码 sn-p 以包含 elementClass Dictionary 的构造函数和声明。还包括填充 elementClasses 的函数。去检查 trace(node.name())
标签: actionscript-3 flash air