我正在构建一个Adobe AIR应用程序,我将一个Dictionary存储在我的SharedObject中。 与提到的here有关的东西。
但为什么我的字典的长度总是为空。我最终不得不手动跟踪似乎有效的长度,但不能让我满怀信心。
另外,有人可以解释什么时候readExternal和writeExternal被调用?我发现它们被多次调用(对我来说似乎是不必要的)。由于它是一本字典,多次添加相同的值并不是一个问题,但是再一次,想知道我是否在这里设置了错误来触发它。
这就是我的
public class SharedObjectDictionary implements IExternalizable {
private var _dictionary:Dictionary;
private var _length:int;
public function addItem and removeItem
{
... just adds/removes to my _dictionary ...
... and keeps track of the length ...
}
public function readExternal(input:IDataInput):void
{
var count:int = input.readInt();
for (var i:Number = 0;i<count;i++)
{
var key:String = input.readObject();
var val:String = input.readObject();
addItem(key,val);
}
}
public function writeExternal(output:IDataOutput):void
{
output.writeInt(_length);
for (var key:Object in dictionary)
{
output.writeObject(key);
output.writeObject(dictionary[key]);
}
}
}
当我进行调用以存储此SharedObject时
var so:SharedObject = SharedObject.getLocal("xxxx");
so.data["xxxxx"] = instance of the SharedObjectDictionary above;
so.flush();
so.close();
so = null;
我发现readExternal被调用一次而writeExternal被调用3次。
谢谢!
答案 0 :(得分:0)
Dictionary的长度始终为null
,因为Dictionary
未定义此类属性。如果您尝试访问某个其他类上不存在的属性,则会出现编译时错误。但由于Dictionary
类为dynamic,因此不会发生此类编译错误。唯一的解决方案是自己跟踪长度。
我无法评论您关于readExternal
/ writeExternal
的其他问题...您是否有可以展示的代码来证明这一点?