Flash Builder中的SharedObject和Dictionary问题



我正在使用Flash Builder创建一些使用SharedObjects的actionscript代码。第一个问题:如何在Flash Builder中删除本地SharedObject ?我正在调试我的程序,SharedObject似乎在运行之间持续存在。我想开始新的和干净的没有SharedObject存储我的数据。我怎样才能摆脱它?

同样,在我的SharedObject中,我使用了mySharedObject。data["mykey"]来存储字典。这个字典将有字符串键和MyCustomClass的值。问题是,当我稍后尝试遍历这个Dictionary的值时,我得到错误#1034不能将对象转换为MyCustomClass类型。似乎我可以将MyCustomClass类型的项放入这个字典中,但是我不能将该项以对象以外的任何形式取出。

你知道出了什么问题吗?

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

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

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

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

有方法注册你的类与播放器存储在SharedObject(见这里)…但是您需要确保反序列化数据的代码也知道这个类。

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

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

为了去掉旧的SO,对so.data["mykey"]使用delete调用并执行so.flush()。编辑:SharedObject.clear()好多了

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(这里的示例)

最新更新