Какие типы данных поддерживает SharedObject?

Я знаю, что хранить строки и числа с SharedObject очень просто, и я также знаком с такими вещами:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var obj:Object = new Object();
obj.prop = "value";
sharedObject.data.userobj= obj;
sharedObject.flush();

Однако я пытаюсь сохранить объект класса GameStage - класса, который я определил для хранения данных об этапах в моей игре. Этот тип вещи, кажется, не работает:

var sharedObject:SharedObject = SharedObject.getLocal("userData");
var stageOne:GameStage = new GameStage();
stageOne.highScore = 99999;
sharedObject.data.stageOne = stageOne;
sharedObject.flush();

Этот код не выдает ошибку, но когда я пытаюсь получить данные этапа позже, вот так:

stageOne = sharedObject.data.stageOne;

Я получаю эту ошибку:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@3d220629 to GameStage.

Я предполагаю, что мой вопрос: какие именно типы данных могут храниться в SharedObject? Везде, где я смотрел онлайн, отвечал на этот вопрос "всем, что можно использовать во Flash", что не очень наглядно - очевидно, мой класс GameStage работает и во Flash. Есть ли что-то о получении данных из SharedObject, о котором я не знаю?

Я прогнозирую, что я не смогу хранить свои сценические данные таким образом. Если это так, может ли кто-нибудь предложить альтернативный способ сохранения данных?

2 ответа

Решение

Вы можете сохранить любой объект в SharedObject, но сначала вам нужно зарегистрировать класс:

Вы можете хранить типизированные экземпляры ActionScript в общих объектах. Это можно сделать, вызвав метод flash.net.registerClassAlias ​​() для регистрации класса. Если вы создадите экземпляр своего класса и сохраните его в элементе данных вашего общего объекта, а затем прочитаете объект, вы получите типизированный экземпляр. По умолчанию свойство objectEncoding SharedObject поддерживает кодировку AMF3 и распаковывает сохраненный экземпляр из объекта SharedObject; сохраненный экземпляр сохраняет тот же тип, который вы указали при вызове метода registerClassAlias ​​().

Одним из предостережений является то, что хранение графов объектов может иногда приводить к проблемам хранения. Существует ограничение на то, сколько вы можете хранить в SharedObject, прежде чем он уведомит пользователя и запросит разрешение на сохранение. Я полагаю, что по умолчанию этот порог равен 100К

Если вы используете Flex Builder SDK или Flex Builder, вы также можете использовать метатег [RemoteClass], который автоматически зарегистрирует класс и сделает его сериализуемым.

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