用于使用AIR 3.2的应用程序不适用于AIR 3.5

时间:2012-12-02 23:52:21

标签: ios actionscript-3 flash air null

当我按下曾经在AIR 3.2 SDK中工作的flash / air应用程序中的按钮时,我收到此错误 - 现在已升级到AIR 3.5 SDK。任何帮助非常感谢。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at seed_template_fla::MainTimeline/frame7()[seed_template_fla.MainTimeline::frame7:31]
    at flash.display::MovieClip/gotoAndPlay()
    at seed_template_fla::MainTimeline/gotoPage()    [seed_template_fla.MainTimeline::frame1:20]
    at seed_template_fla::MainTimeline/gotoRepro()    [seed_template_fla.MainTimeline::frame1:12]

我正在使用Mac上的Flash CS6为iPhone创建应用,并使用Air 3.5 SDK进行导出。我还安装了AIR 3.5运行时。

该应用程序目前非常简单。当您使用gotoAndPlay(frameNr)函数按下按钮时,它基本上会逐帧移动。框架上有一些用于在单击时更新数字数组的六边形。它们也被切换为可见/不可见。

这曾经使用AIR 3.2 SDK完美地工作,但我最近从adobe下载了AIR 3.5 SDK并通过flash添加了它(帮助>管理Air SDK)并将其设置为文件>发布设置>目标中的构建目标

当我切换回AIR 3.2 SDK时,该应用程序再次完美运行。

此外,当我使用AIR 3.5 SDK将应用程序上传到运行IOS 5.1的iPhone 4S时,我只看到一个带有5个加载点闪烁的黑屏。这也适用于AIR 3.2 SDK。

这是第7帧的代码 最后一行是第31行。

stop();
techtitle.text = "Select Trait";
techdesc.text = "Spend points to change core stats and other special abilities";
points.visible = false;
techpoints.visible=false;
pointsbalance.text = myPoints.toString();
btn_tech.visible = false;
curTechSelected = null;

trace("set hexes invisible");
for (var j:int = 0; j <= 67; j++) {
    if (hexStatusb[j] == 1) {
        this["btn_hex_"+j+"b"].visible = false;
    }
}

function onBtnHex37bClick(event:MouseEvent):void
{
    techtitle.text = "tech1";
    techdesc.text = "tech1 description"
    techpoints.text = "-2";
points.visible = true;
techpoints.visible=true;
btn_tech.visible = true;
curTechSelected = btn_hex_37b;
curTechSelectedNr = 37;
curTechPoints = 2;
}

trace(this["btn_hex_37b"]);
btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);

4 个答案:

答案 0 :(得分:1)

好的 - 所以,在尝试了很多事情后,我想出了为什么会发生这种情况。

解决方案:运行AIR 3.5 SDK时删除所有TFL文本对象

似乎TFL文本库在运行时没有正确加载。我忽略了一件至关重要的事情就是我收到了这条警告信息(类似于http://forums.adobe.com/thread/825637) 内容不会流...预加载的运行时共享库​​是textLayout_1.0.0.05 ... TFLText

和输出中的此警告消息

警告:忽略来自http://fpdownload.adobe.com/pub/swz/crossdomain.xml的政策文件中的“安全”属性。 'secure'属性仅允许在HTTPS和套接字策略文件中使用。

只需移除所有TFLText对象并将其更改为经典文本,即可使应用再次正常工作。

答案 1 :(得分:1)

@csomakk好消息。我找到了答案。您可以在3.5和3.6中发布,也可以使用TLF文本。我在我的博客上发布了一篇文章,其中显示了how to do it

答案 2 :(得分:0)

要开始:错误消息指出某些内容为空...这意味着程序不知道,在哪里查找它。当你没有创建对象时,它可能会发生(btn_hex_37b = new MovieClip());或者你甚至没有为它创建变量。

在给定的行上(btn_hex_37b.addEventListener(MouseEvent.CLICK,onBtnHex37bClick);)只有btn_hex_37b可以为null,因为onBtnHex37bClick存在,如果不存在,程序将无法编译。

切换到AIR 3.5时出现的原因可能是它以不同的顺序调用某些创建函数。转到定义btn_hex_37b变量的行。搜索调用的函数..确保在转到frame7之前创建了btn_hex_37b。

此外,如果它不是一个重要的,有onBtn_hex_37bClick,你可以做以下事情:

if(btn_hex_37b){
    btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick);
}

if将检查btn_hex_37b是否为空。 在else方法上,你可以给出一个有时间的方法(但这很难看),或者在创建对象后立即给出eventlistener。

希望这会有所帮助。

答案 3 :(得分:0)

对于Flash CS6,请复制此swc: / Applications / Adob​​e Flash CS6 / Common / Configuration / ActionScript 3.0 / libs / flash.swc

使用以下步骤进入我的Flash Builder项目: http://interactivesection.files.wordpress.com/2009/06/include_fl_packages_in_flex_builder-1.jpg

然后使用此链接 http://curtismorley.com/2013/03/05/app-used-to-work-with-air-3-2-or-3-4-doesnt-work-with-air-3-5-or-3-6/#comment-241102