0

我正在使用 Flash Builder 创建一些使用 SharedObjects 的动作脚本代码。第一个问题:如何在 Flash Builder 中删除我的本地 SharedObject?我正在调试我的程序,并且 SharedObject sems 在运行之间持续存在。我想在没有 SharedObject 存储我的数据的情况下重新开始。我该如何摆脱它?

另外,在我的 SharedObject 中,我使用了 mySharedObject.data["mykey"] 来存储字典。此字典将具有 MyCustomClass 的字符串键和值。问题是,当我稍后尝试遍历此 Dictionary 的值时,我收到错误 #1034 cannot convert object to type MyCustomClass。似乎我可以将 MyCustomClass 类型的项目放入该字典中,但我无法将该项目作为对象以外的任何东西取出。

知道出了什么问题吗?

4

3 回答 3

2

这些本质上是两个问题,因此应该作为两个问题提出。无论如何,我会在这里回答它们,但仍然希望您将它们分成两部分(可能在此处留下指向另一部分的链接以供参考):

本地共享对象,对于跨运行的持久性非常有用。然后是SharedObject.clear()根据需要清除状态。

对于您的第二个问题,共享对象将您的对象序列化为AMF,以便可以将其写入磁盘或使用RTMP通过网络发送。现在,您的自定义类不能真正在AMF中序列化。实际发生的是公共属性(和动态属性,如果类被声明为动态的)被序列化到结构中。因此,存储了公共数据......但它本质上是一个通用的Object。为了解决这个问题,你可以有一个

公共静态读取(对象:对象):MyCustomClass
类型函数,它将从传递的对象中读取属性以构造一个
新的 MyCustomClass
代表该信息。

有一些方法可以将您的类注册到要存储在 SharedObject 中的播放器中(请参见此处)...但是您需要确保反序列化该数据的代码也知道该类。

于 2013-05-06T08:22:08.773 回答
1

要使类可用于转换,请在全局初始化中使用registerClassAlias()call withMyCustomClass及其完全限定名称作为参数。手册。 假设您的自定义类是foo.bar.TheClass,您编写:

registerClassAlias('foo.bar.TheClass',foo.bar.TheClass);

为了放弃旧的 SO,请使用deletecall againstso.data["mykey"]和 do so.flush()。编辑:SharedObject.clear()更好。

于 2013-05-06T08:22:57.860 回答
0

1/ 持久化是 SharedObject 的特性之一。要清理其所有内容,您需要调用clear方法。

var shareObject:SharedObject = SharedObject.getLocal('justatest'); 
shareObject.data.test = 'test';
trace(shareObject.data.test)
shareObject.clear();
trace(shareObject.data.test)

输出

test
undefined

2/ 要在 SO 中存储复杂的数据类型,您需要使用flash.net.registerClassAlias此处为示例

于 2013-05-06T08:26:43.650 回答