Проблемы с 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 ( пример здесь)

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