0

swf をロードするアプリケーションがあります。サーバーに新しい swf ができるまで、その swf を数回使用できます。したがって、swf を含むローダーを SharedObject として保存したいと考えています。次回は、swf を再度ロードする代わりに、SharedObject のローダーを使用することができます (既に 1 回ロードされているため)。

そのために、私は次のことを行います。

var sObject: SharedObject = SharedObject.getLocal('PrefsObj');//my SharedObject.
registerClassAlias( "remoteSharedObject.NxLoader", NxLoader );//I register every time my custom Loader class which just extends from Loader.

if(sObject && sObject.data &&  sObject.data.loader)//I check if the sharedObject is empty? If not I get the previously saved loader.
  loader = sObject.data.loader as NxLoader;
else//if it's empty I create the loader and load the bytes
{
  loader = new NxLoader();
  loader.loadBytes(swfBA,context);
}     
this.addChild(loader);//add the loader.
sObject.data.loader = loader;//save the loader on my sharedObject for next time.
sObject.flush();//done.

私は何を間違っていますか?SharedObject 内のローダーは認識されず、オブジェクトとして提供されます。addChild メソッドに到達すると - ブーム! -> メイン スレッド (中断: TypeError: エラー #2007: パラメーターの子は非 null でなければなりません。)

ありがとう

4

1 に答える 1

1

そうですか; そのため、SWF をローカル システムにキャッシュして、サーバーのオーバーヘッドを削減する必要があります。Adobeのリファレンスによると...

「SharedObject クラスは、ユーザーのコンピューター上の限られた量のデータを読み取り、保存するために使用されます...

...SWF ファイルがローカル共有オブジェクトの書き込みを許可されていない場合や、ローカル共有オブジェクトに保存されているデータが知らないうちに削除されている場合があります。」

SharedObject storageのユーザーのデフォルト設定を見ると、そこに保存されているデータの最大値が 100KB であることがわかります。したがって、ほとんどのファイルはこの最大サイズを超えるため、SWF 全体を保存することは (不可能ではないにしても) 非現実的です。nullこれは、保存したオブジェクトから値を受け取る理由について理解できます。

于 2013-11-06T15:03:40.360 に答える