0

フレックス共有オブジェクト機能を使用してデータを保存しようとしています。データは正常に保存されていますが、元のオブジェクトに型キャストできませんでした。たとえば、カスタム クラスのオブジェクトを保存していました。それを取得すると、オブジェクト型になります。調べたときにデバッグモードを使用しましたが、カスタムクラスのすべてのメンバーとその値が含まれています。しかし、オブジェクト型からカスタム クラスにキャストすることはできません。

誰でもこれで私を助けることができますか?

4

2 に答える 2

3

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;
于 2012-12-12T05:03:08.697 に答える
1

カスタム クラスは 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

于 2012-12-12T05:35:39.463 に答える