GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

Adobe AIR SDK 15 の iOS アプリで arguments.callee が動作してない?

iOS8 がらみで、AIR SDK の更新が必要になりそうなので、現在リリースされている最新版の AIR SDK 15 (15.0.0.249)をダウンロード。


The future of Adobe AIR

iPhone向けにパブリッシュして、実機テストをしていたところ、アプリがフリーズ。

調べてみたところ、 無名関数などで、関数自体を参照するためのプロパティ 「arguments.callee」 が動作していないっぽい。



関数内で、removeEventListener すると、
TypeError: Error #2007: Parameter listener must be non-null.
という表示が出て、止まっていることが判明。

例えば以下のようなコードの場合

addEventListener(TimerEvent.TIMER_COMPLETE,function(event:TimerEvent):void{
    for (var i:uint = 0; i < arguments.length; i++) { 
        trace("arguments:",arguments[i]); 
    } 
    trace("arguments.callee:",arguments.callee);
    removeEventListener(TimerEvent.TIMER_COMPLETE,arguments.callee);
});

AIR SDK 15 でパブリッシュしたアプリだと、

arguments: [TimerEvent type="timerComplete" bubbles=false cancelable=false eventPhase=2]
arguments.callee: undefined
TypeError: Error #2007: Parameter listener must be non-null.

となって、止まってしまう。

AIR SDK 14 (14.0.137)でパブリッシュしたアプリだと、

arguments: [TimerEvent type="timerComplete" bubbles=false cancelable=false eventPhase=2]
arguments.callee: function Function() {}

と表示される。

本来は、arguments.callee には、値が入っているはずなのに、AIR SDK 15 では、
「undefined」すなわち、値が入ってきていない。

ちなみに、AIR SDK 15 のβ版(15.0.0.258)でも同じ結果。
http://labs.adobe.com/technologies/flashruntimes/air/

一難去ってまた一難。うーん、困った。

とりあえず、arguments.calleeを使わない方法に書き換えるしかないのかなぁ。