フレックス共有オブジェクト機能を使用してデータを保存しようとしています。データは正常に保存されていますが、元のオブジェクトに型キャストできませんでした。たとえば、カスタム クラスのオブジェクトを保存していました。それを取得すると、オブジェクト型になります。調べたときにデバッグモードを使用しましたが、カスタムクラスのすべてのメンバーとその値が含まれています。しかし、オブジェクト型からカスタム クラスにキャストすることはできません。
誰でもこれで私を助けることができますか?
フレックス共有オブジェクト機能を使用してデータを保存しようとしています。データは正常に保存されていますが、元のオブジェクトに型キャストできませんでした。たとえば、カスタム クラスのオブジェクトを保存していました。それを取得すると、オブジェクト型になります。調べたときにデバッグモードを使用しましたが、カスタムクラスのすべてのメンバーとその値が含まれています。しかし、オブジェクト型からカスタム クラスにキャストすることはできません。
誰でもこれで私を助けることができますか?
registerClassAlias を使用できます
registerClassAlias("com.path.to.MyClass", MyClass);
myStuff = SharedObject.getLocal("myAppStuff");
myStuff.data.whatINamedIt = myClassInstance;
myStuff.flush();
今それを取り戻すとき...あなたは言うことができます:
myStuff = SharedObject.getLocal("myAppStuff");
var mySavedClass:MyClass = myStuff.data.whatINamedIt as MyClass;
カスタム クラスは IExternalizable を実装する必要があります
共有オブジェクトを取得する前に、registerClassAlias を使用する必要があります
private var so:SharedObject;
private function writeMyCustomClass():void
{
registerClassAlias("classes.MyCustomClass", MyCustomClass);
so = SharedObject.getLocal("savedCustom");
so.clear();
var mycustom:MyCustomClass = new MyCustomClass;
mycustom.name = "Raja";
mycustom.age = 27;
so.data.custom = getAndwriteCustomClassToByteArray(mycustom).readObject();
so.flush();
}
private function getAndwriteCustomClassToByteArray(mycustom:MyCustomClass):ByteArray
{
var copier:ByteArray = new ByteArray();
copier.position=0;
copier.writeObject(mycustom);
copier.position=0;
return copier;
}
private function getMyCustomClass():void
{
registerClassAlias("classes.MyCustomClass", MyCustomClass);
so = SharedObject.getLocal("savedCustom");
var mycustom:MyCustomClass = so.data.custom;
}
package
{
import flash.utils.IDataInput;
import flash.utils.IDataOutput;
import flash.utils.IExternalizable;
public class MyCustomClass implements IExternalizable
{
public var name:String;
public var age:int;
public function MyCustomClass()
{
}
public function writeExternal(output:IDataOutput):void {
output.writeObject(this.name);
output.writeInt(this.age);
}
public function readExternal(input:IDataInput):void {
this.name=input.readObject();
this.age=input.readInt();
}
}
ソース: www.actionscript.org