Проблемы с SharedObject и Dictionary в Flash Builder
Я использую Flash Builder для создания кода ActionScript, который использует SharedObjects. Первый вопрос: как я могу удалить свой локальный SharedObject в Flash Builder? Я отлаживаю свою программу и семя SharedObject для сохранения между запусками. Я хочу начать все заново и без каких-либо SharedObject, хранящих мои данные. Как мне от этого избавиться?
Кроме того, в моем SharedObject я использовал mySharedObject.data["mykey"] для хранения словаря. Этот словарь будет иметь строковые ключи и значения MyCustomClass. Проблема в том, что когда я позже пытаюсь перебрать значения этого словаря, я получаю ошибку #1034, не могу преобразовать объект в тип MyCustomClass. Кажется, что я могу поместить элемент типа MyCustomClass в этот словарь, но я не могу вернуть элемент как что-либо, кроме объекта.
Есть идеи, что не так?
3 ответа
По сути, это два вопроса, поэтому их нужно было задавать как два вопроса. В любом случае, я бы ответил на них здесь, но все же предпочел бы, чтобы вы разбили их на две части (возможно, оставьте ссылку на другую здесь для справки):
Локальный общий объект, полезный именно для постоянства между запусками. А затем есть SharedObject.clear() для очистки состояния по мере необходимости.
Для вас вторая проблема: Shared Object сериализует ваш объект в AMF, чтобы его можно было записать на диск или отправить по сети с использованием RTMP. Теперь ваш пользовательский класс не может быть сериализован в AMF. На самом деле происходит то, что открытые свойства (и динамические, если класс объявлен динамическим) сериализуются в структуру. Итак, публичные данные хранятся... но это по сути общий объект. Чтобы обойти это, вы можете иметь
public static readFrom(object:Object):MyCustomClassФункция типа, которая будет читать свойства из переданного объекта для создания
новый MyCustomClassпредставляя эту информацию.
Есть способы зарегистрировать свой класс в плеере, который будет храниться в SharedObject (см. Здесь)... но вам нужно убедиться, что код, который десериализует эти данные, также знает о классе.
Чтобы сделать класс доступным для преобразования, в вашей глобальной инициализации используйте registerClassAlias()
позвонить с MyCustomClass
и его полное имя в качестве параметров. Руководство. Скажите, что ваш пользовательский класс foo.bar.TheClass
, ты пишешь:
registerClassAlias('foo.bar.TheClass',foo.bar.TheClass);
Для того, чтобы отбросить старое использование SO delete
против so.data["mykey"]
и делать 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
( пример здесь)