SharedObject支持哪些数据类型?

时间:2009-07-09 19:50:20

标签: actionscript-3 shared-objects

我知道使用SharedObject存储字符串和数字是一件简单的事情,我也熟悉这类事情:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var obj:Object = new Object();
obj.prop = "value";
sharedObject.data.userobj= obj;
sharedObject.flush();

但是,我试图存储GameStage类的对象,这是我定义的类,用于保存游戏中各阶段的数据。这种类型的东西似乎不起作用:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var stageOne:GameStage = new GameStage();
stageOne.highScore = 99999;
sharedObject.data.stageOne = stageOne;
sharedObject.flush();

此代码不会引发错误,但是当我尝试稍后检索阶段数据时,如下所示:

stageOne = sharedObject.data.stageOne;

我收到此错误:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@3d220629 to GameStage.

我想我的问题是:究竟什么类型的数据类型可以存储在SharedObject中?我在网上看到的所有地方都回答了“可以在Flash中使用的任何东西”的问题,这不是很具描述性 - 显然我的GameStage类也适用于Flash。有什么关于从SharedObject中检索我不知道的数据吗?

我的预测是我无法以这种方式存储我的舞台数据。如果是这种情况,是否有人可以建议另一种方法来保存数据?

2 个答案:

答案 0 :(得分:6)

您可以将任何对象存储在SharedObject中,但您需要先注册该类:

  

您可以存储键入的ActionScript   共享对象中的实例。你做   这通过调用   flash.net.registerClassAlias()方法   注册课程。如果你创建   你的类的一个实例并存储它   在您共享的数据成员中   对象然后读出对象,   你会得到一个打字的实例。通过   默认情况下,SharedObject   objectEncoding属性支持AMF3   编码,并解压缩您存储的   来自SharedObject对象的实例;   存储的实例保留相同的内容   你打电话时指定的类型   registerClassAlias()方法。

有一点需要注意,存储对象图有时会导致存储问题。在通知用户并要求存储更多权限之前,您可以在SharedObject中存储多少内容。我相信这个阈值默认为100k。

答案 1 :(得分:2)

如果您使用的是Flex Builder SDK或Flex Builder,您还可以使用[RemoteClass]元标记,它将自动注册该类并使其可序列化。