What data types does a SharedObject support?

Refresh

December 2018

Views

2.7k time

2

I know it is a simple matter to store Strings and Numbers with a SharedObject, and I am also familiar with this sort of thing:

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

However, I am attempting to store an object of the class GameStage, a class I have defined to hold data about stages in my game. This type of thing doesn't seem to be working:

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

This code doesn't throw an error, but when I try to retrieve the stage data later, like so:

stageOne = sharedObject.data.stageOne;

I get this error:

TypeError: Error #1034: Type Coercion failed: cannot convert [email protected] to GameStage.

I guess my question is: exactly what sort of data types can be stored in a SharedObject? Everywhere I've looked online has answered that question with "anything that can be used in Flash", which isn't very descriptive – obviously my GameStage class works in Flash too. Is there something about retrieving data from the SharedObject that I'm not aware of?

My prediction is that I will not be able to store my stage data this way. If that is the case, could anyone suggest an alternative method to saving the data?

2 answers

6

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

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

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

2

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