モバイルFlashではregisterClassAlias()が使えない?
モバイルFlash開発で、カスタムクラス型をSharedObjectに保存しようとして以前のようにregisterClassAlias()を使うも、どうしてもnullになる。
琴線探査: FlexでSharedObjectにカスタムクラス型を保存するには?
カスタムクラスはpublicなStringのプロパティーを2つ持っているだけ。getterもsetterもfunctionも無し。
テストプログラムも超簡単。ApplicationCompleteのイベントのところでこのようにした。
書き込んだすぐに読み込むとテストにならないので、初回起動時はisWriteをtrueにして、次に起動する時にisWriteをfalseにする。
このようにして2回目に起動した時のトレースはこうだ。
tcObj.name=jun tcRead=null
Object型のままの場合はname値が取得できているので、正しくデータが書きこまれていることはわかる。しかし、TestClass型にキャストしたものはnull。
オレってば、何か間違ってる?
そうでないとすると、モバイルFlashではregisterClassAlias()が機能しないのかもしれない・・・
琴線探査: FlexでSharedObjectにカスタムクラス型を保存するには?
カスタムクラスはpublicなStringのプロパティーを2つ持っているだけ。getterもsetterもfunctionも無し。
package { public class TestClass { public var name:String; public var url:String; public function TestClass() { } } }
テストプログラムも超簡単。ApplicationCompleteのイベントのところでこのようにした。
protected function onApplicationComplete():void { var so:SharedObject = SharedObject.getLocal("TestApp"); registerClassAlias("TestClass", TestClass); var isWrite:Boolean = true; if (isWrite) { trace("onApplicationComplete() write!"); var tcWrite:TestClass = new TestClass(); tcWrite.name = "jun"; tcWrite.url = "koro"; so.data.tmp = tcWrite; so.flush(); } else { trace("onApplicationComplete() read!"); var tcObj:Object = so.data.tmp; var tcRead:TestClass = so.data.tmp as TestClass; trace("tcObj.name=" + tcObj.name + " tcRead=" + tcRead); } }
書き込んだすぐに読み込むとテストにならないので、初回起動時はisWriteをtrueにして、次に起動する時にisWriteをfalseにする。
このようにして2回目に起動した時のトレースはこうだ。
tcObj.name=jun tcRead=null
Object型のままの場合はname値が取得できているので、正しくデータが書きこまれていることはわかる。しかし、TestClass型にキャストしたものはnull。
オレってば、何か間違ってる?
そうでないとすると、モバイルFlashではregisterClassAlias()が機能しないのかもしれない・・・
コメント
コメントを投稿