Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отсутствие типа данных, при обращении к данным в SharedObject (http://www.flasher.ru/forum/showthread.php?t=154441)

Denis_ex 17.04.2011 19:53

Отсутствие типа данных, при обращении к данным в SharedObject
 
Есть экземпляр gameData класса GameData, который содержит члены-переменные: level, score и пр.

Код AS3:

//Записываю gameData в SharedObject экземпляр:
 
var sharedObject:SharedObject = SharedObject.getLocal("profile");
sharedObject.data[“gameData”] = gameData;
 
//Далее перезапускаю игру и обращаюсь:
var sharedObject:SharedObject = SharedObject.getLocal("profile");
var gd: GameData = GameData (sharedObject.data.gameData);
//компилятор выдает ошибку, что не может привести тип к GameData, т.к. возвращаемый объект типа данных Object.

Фактически sharedObject.data.gameData – содержится объект типа Object, а не типа GameData, хотя и имеет все динамические члены-переменные (level, score) и пр.

Если сделать так, то все ок:
Код AS3:

var gd:*= sharedObject.data.gameData;

Почему, когда мы записывает экзепляр класса в SharedObject, то получаем на выходе тип Object, а не GameData ?

alatar 17.04.2011 20:15

Все объекты записываемые в SharedObject сериализуются с помощью AMF. Со всеми вытекающими. Для корректной десериализации ваш класс должен реализовывать IExternalizable.

udaaff 17.04.2011 20:33

registerClassAlias() в помощь.

Denis_ex 18.04.2011 16:55

Делаю:
//Записываю gameData в SharedObject экземпляр:

Код:

registerClassAlias(getQualifiedClassName(gameData), getDefinitionByName(gameData) as Class);
var sharedObject:SharedObject = SharedObject.getLocal("profile");

sharedObject.data[“gameData”] = gameData;
 
//Далее обращаюсь:
var sharedObject:SharedObject = SharedObject.getLocal("profile");
var gd: GameData = GameData (sharedObject.data.gameData);

//компилятор выдает ошибку, что не может привести тип к GameData, т.к. возвращаемый объект типа данных Object.

Но все-равно возвращается тип Object, подскажите может, что еще надо сделать + не совсем пойму, что за псевдоним отправляется в первый параметр (т.е. зачем он нужен в данном случае)...

cleptoman 18.04.2011 17:04

зарегистрируйте как сказал udaaff

alatar 18.04.2011 17:10

Сначала, регистрируется класс. Потом кодируется/декодируется.

udaaff 18.04.2011 17:13

Алатар, всё проще в этом случае.

Denis_ex 18.04.2011 17:44

Цитата:

Сообщение от alatar (Сообщение 990357)
Сначала, регистрируется класс. Потом кодируется/декодируется.

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

udaaff 18.04.2011 17:50

Денис, погуглите по той информации, которую я вам дал.

Denis_ex 18.04.2011 20:08

Спасибо, помогло:)
Если кому надо: http://riapriority.com/blogs/graann....sterclassalias

Добавлено через 31 минуту
Возник вопрос: если вызывать несколько раз registerClassAlias к одному и тому же классу, то ничего не будет дублироваться, вторичная регистрация отсеется на стадии инкапсуляции?


Часовой пояс GMT +4, время: 23:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.