0

Flash Builder を使用して、SharedObjects を使用するアクション スクリプト コードを作成しています。最初の質問: Flash Builder でローカルの SharedObject を削除するにはどうすればよいですか? 私は自分のプログラムをデバッグしていますが、SharedObject は実行間で持続するように見えます。データを保存する SharedObject を使用せずに、新鮮でクリーンな状態で開始したいと考えています。どうすればそれを取り除くことができますか?

また、私の SharedObject では、mySharedObject.data["mykey"] を使用して Dictionary を格納しました。このディクショナリには、文字列キーと MyCustomClass の値が含まれます。問題は、後でこの Dictionary の値をループしようとすると、エラー #1034 cannot convert object to type MyCustomClass が発生することです。MyCustomClass 型の項目をこのディクショナリに入れることはできるようですが、項目をオブジェクト以外のものとして戻すことはできません。

何がうまくいかないのですか?

4

3 に答える 3

2

これらは本質的に 2 つの質問なので、2 つの質問として尋ねるべきでした。とにかく、私はここでそれらに答えたいと思いますが、それらを 2 つの部分に分割することをお勧めします (参考のために、他の部分へのリンクをここに残しておくことをお勧めします)。

ローカル共有オブジェクトは、実行間の永続性に正確に役立ちます。そして、必要に応じて状態をクリアするためのSharedObject.clear()があります。

2番目の問題については、共有オブジェクトがオブジェクトをAMFにシリアル化して、ディスクに書き込んだり、 RTMPを使用してネットワーク経由で送信したりできるようにします。これで、カスタム クラスをAMFで実際にシリアル化することはできません。実際に何が起こるかというと、パブリック プロパティ (および、クラスが動的であると宣言されている場合は動的プロパティ) が構造体にシリアル化されます。したがって、公開データは保存されます...しかし、それは本質的に一般的なObjectです。これを回避するには、

public static readFrom(object:Object):MyCustomClass
渡されたオブジェクトからプロパティを読み取り、
新しい MyCustomClass
その情報を表しています。

クラスをプレーヤに登録して SharedObject に格納する方法はいくつかあります (こちらを参照)...ただし、そのデータを逆シリアル化するコードがクラスも認識していることを確認する必要があります。

于 2013-05-06T08:22:08.773 に答える
1

クラスを変換できるようにするには、グローバル初期化でregisterClassAlias()call withMyCustomClassとその完全修飾名をパラメーターとして使用します。マニュアル。 カスタム クラスがfoo.bar.TheClassであるとします。次のように記述します。

registerClassAlias('foo.bar.TheClass',foo.bar.TheClass);

古い SO を削除するには、deletecall againstso.data["mykey"]と do を使用しますso.flush()。編集:SharedObject.clear()はるかに優れています。

于 2013-05-06T08:22:57.860 に答える
0

1/ 永続的であることは、SharedObject の特徴の 1 つです。すべてのコンテンツをクリーンアップするには、 clearメソッドを呼び出す必要があります。

var shareObject:SharedObject = SharedObject.getLocal('justatest'); 
shareObject.data.test = 'test';
trace(shareObject.data.test)
shareObject.clear();
trace(shareObject.data.test)

出力

test
undefined

2/複雑なデータ型をSOに保存するには、使用する必要がありますflash.net.registerClassAlias例はこちら

于 2013-05-06T08:26:43.650 に答える