1

Adobe AIR アプリを作成していて、SharedObject に Dictionary を保存しています。ここに記載されている内容に沿ったもの。

しかし、辞書の長さが常に null なのはなぜですか。結局、機能しているように見える長さを手動で追跡する必要がありますが、自信がありません。

また、正確に 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 が 1 回呼び出され、writeExternal が 3 回呼び出されることがわかりました。

ありがとう!

4

1 に答える 1

0

はそのようなプロパティを定義していないため、辞書の長さは常にです。他のクラスに存在しないプロパティにアクセスしようとすると、コンパイル時エラーが発生します。しかし、クラスは動的であるため、そのようなコンパイル エラーは発生しません。唯一の解決策は、自分で長さを追跡することです。nullDictionaryDictionary

readExternal/についてのあなたの他の質問にはコメントできませんwriteExternal... これを実証するために表示できるコードはありますか?

于 2013-07-12T16:40:39.113 に答える