Я создаю приложение Adobe AIR, и я храню словарь в своем SharedObject. Что-то вроде строк here.Длина свойства моего сериализованного словаря для хранения в 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 раза.
Спасибо!
ах имеет смысл для нулевого тогда! См. Мой отредактированный вопрос с большим количеством кода, демонстрирующим, что я делаю. –
Только совет: мне очень нравится «LinkedMap», найденный в пакете as3commons-collection [as3commons.org] (http://www.as3commons.org). Это в основном комбинация словаря и массива, поэтому «длина» - наряду со многими другими полезными вещами - уже позаботилась. –
приятно, спасибо Т. –