次のデータクラスの例を考えてみましょう:
[RemoteClass]
public class SOTestData {
public var i:int;
public function SOTestData(i:int) {
this.i = i;
}
}
私が理解しているように、RemoteClass メタデータ タグは、このクラスのオブジェクトが実体化されたときに型情報が保持されるようにする必要があります。
次のプログラムを使用してテストしました。
public class SOTest extends Sprite {
public function SOTest() {
var data:SharedObject = SharedObject.getLocal("SOTest");
if (data.data.object) {
try {
var stored:SOTestData = data.data.object;
trace(stored.i);
} finally {
data.clear();
}
}
else {
data.data.object = new SOTestData(15);
data.flush();
}
}
}
ここでは、最初の実行でデータが書き込まれ、数秒で読み取りとクリアが行われます。これを実行しても、クラス キャスト エラーが発生します。実際、SharedObject にはタイプ情報が格納されていません。
メタデータを間違って使用しているとは思いませんが、コンパイラがメタデータをどう処理すればよいかわからない可能性がありますか? コンパイラ エラーや警告は表示されませんが、存在しないタグを使用しても問題はありません。FlashDevelop を IDE として Flex 4.6 SDK を使用しています。
編集:
以下は共有オブジェクトです。ご覧のとおり、型は実際の型ではなく「オブジェクト」として保存されます。
so = [object #2, class 'SharedObject'] {
data: [object #0, class 'Object'] {
object: [object #1, class 'Object', dynamic 'False', externalizable 'False'] {
i: 15,
},
}
}