Свойство длины моего сериализованного словаря для хранения в SharedObject

Я создаю приложение Adobe AIR и храню словарь в своем SharedObject. Нечто подобное тому, что здесь упоминается.

Но почему длина моего словаря всегда равна нулю. В итоге мне приходится вручную отслеживать длину, которая, кажется, работает, но не наполняет меня уверенностью.

Кроме того, кто-то может объяснить, когда именно вызывается 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 раза.

Спасибо!

1 ответ

Длина вашего словаря всегда null поскольку Dictionary не определяет такое свойство. Если вы попытаетесь получить доступ к свойству, которое не существует в каком-либо другом классе, вы получите ошибку времени компиляции. Но так как Dictionary класс динамический, такой ошибки компиляции не будет. Единственное решение - следить за длиной самостоятельно.

Я не могу прокомментировать ваш другой вопрос о readExternal/writeExternal... есть ли у вас код, который вы можете показать, который демонстрирует это?

Другие вопросы по тегам