2010年6月11日金曜日

FlexでSharedObjectにカスタムクラス型を保存するには?

Flex(AS3)でSharedObjectにカスタムクラス型を保存する必要が出てきた。

今回のケースではカスタムクラスを集めたArrayCollectionを保存したかったのだけど、これをSharedObjectに保存すると次に読み込んだ時にArrayCollectionの中身はObject型になってしまう。

Object型で保存されていても、元のデータを読み込むことはできた。しかし、データを書き込む事ができない。そこで、カスタムクラス型にキャストしようとして
var customClass:CustomClass = object as CustomClass;

とするとcustomClassはnullとなるし
var customClass:CustomClass = CustomClass(object);

では強制型変換に失敗する。

やはり、何とかSharedObjectにCustomClass型で保存する必要がある。

そこで、SharedObjectを保存する前にこうした。
registerClassAlias("CustomClass", CustomClass);
これでArrayCollectionに入っているCustomClassを
var so:SharedObject = SharedObject.getLocal("MyApp");
var ac:ArrayCollection = so.data.arraycollection;
var object:Object = ac.getItemAt(0);
var customClass:CustomClass = object as CustomClass;
として得ることができ、データの書き込みもできるようになった。

なにげに、このようなケースは初めてだった(^^);