0

我有一个正在加载 swf 的应用程序。我可以多次使用该 swf,直到服务器上有一个新的。因此,我想将包含 swf 的加载器保存为 SharedObject。下次我可以使用 SharedObject 中的加载器,而不必再次加载 swf(因为它已经加载过一次)。

为此,我执行以下操作:

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 方法时——Boom!-> 主线程(暂停:TypeError:错误 #2007:参数 child 必须为非空。)

谢谢

4

1 回答 1

1

我懂了; 因此,您希望在本地系统上缓存 SWF 以减少服务器开销。根据 Adob​​e 的参考...

“SharedObject 类用于在用户计算机上读取和存储有限数量的数据......

... 有时 SWF 文件可能不允许写入本地共享对象,有时本地共享对象中存储的数据可能会在您不知情的情况下被删除。”

如果您查看SharedObject 存储的用户默认设置,您会注意到其中存储的数据最大为 100KB。因此,保存整个 SWF 是不切实际的(如果不是不可能的话),因为大多数文件都大于此最大值。null这对于为什么您会从保存的对象中收到一个值是有道理的。

于 2013-11-06T15:03:40.360 回答