2012-04-02 6 views
0

私は現在、以下のクラスを持っている脚本のモバイルアプリケーションを持っている:AS3/Flexの - persistNavigatorState +のArrayCollection(とオブジェクト)

[Bindable] 
public class Foo 
{ 
    public var myString:String; 
    public var myList:ArrayCollection; 
    public function Foo() {} 
} 

私はまた私のViewNavigatorApplicationpersistNavigatorState="true"を持っています。

private function init():void { 
    var s:String = "test_string"; 
    var a:ArrayCollection = new ArrayCollection(); 
    a.addItem("test1"); 
    a.addItem("test2"); 
    a.addItem("test3"); 

    data.foo = new Foo(); 
    data.foo.myString = s; 
    data.foo.myList = a; 

    trace(data.foo.myString); 
    trace(data.foo.myList[0]); 
    trace(data.foo.myList[1]); 
    trace(data.foo.myList[2]); 
} 

実行すると、すべてが私のアプリでは正常に動作します:

は私creationComplete="init()"呼び出しで、次のしている私の最初のビューでと仮定します。しかし、ユーザーが誤ってアプリを終了した場合にセッションを維持したいので、再開時にデータが残っているはずです。

代わりに私のアプリケーションを閉じて再オープンすると、myStringプロパティだけが残っています(つまり、 "test_string"をトレースします)が、ArrayCollectionはコピーされません。

私はObjectUtil.clone()ObjectUtil.copy()で次のことを試してみた:

data.foo.myString = ObjectUtil.copy(s) as String; 
data.foo.myList = ObjectUtil.copy(a) as ArrayCollection; 

をし、私も試してみた:

var f:Foo = new Foo(); 
f.myString = s; 
f.myList = a; 
data.foo = ObjectUtil.copy(f) as Foo; 
trace(data.foo.myString); 
trace(data.foo.myList[0]); 

が、これは私だけ

TypeError: Error #1009: Cannot access a property or method of a null object reference.

どれをスローしますArrayCollectionsとFooクラスをモバイルアプリケーションに永続化する方法に関するアイデア

答えて

0

私は100%確信していませんが、最近モバイルアプリで作業しているときに、この種の問題について疑問を抱いていました。

ViewNavigator.pushView()メソッドを使用してビューに渡すのではなく、ビューでデータを手動で設定すると問題が発生する可能性があります。

ソースを参照するだけで、Viewに直接データを設定すると、ViewNavigatorのデータ永続性が回避されます。そうは言って、私はそれもその文字列の値を覚えているだろう、なぜわからない:)

私は次の操作を実行しようとするけれども:

  • 内部からのビューのデータプロパティを設定しません可能な場合は、のcreationCompleteハンドラ
  • で、今やっているようビュー、可能な場合は、MXML
  • にViewNavigatorApplicationの「firstView」プロパティを使用し、MXMLで「firstViewData」プロパティを初期化(できない場合があります)
  • 上記の2つを実行できない場合は、アプリケーションでそのデータを渡すためにnavigator.pushView(View_Class_Name、foo)を呼び出します。
+0

私は上記のすべてを試しましたが、物事はまだ非常にうんざりした方法で動作しています。非常に感謝していますが、私の元の質問は私が直面していた問題ではなかったと思います。現在、カスタムオブジェクトをデータに保存しておくこと(つまり、data.my_custom_object = some_custom_object)は、モバイルがシャットオフしてオンになったときに保存して保持することが多いです。 –

関連する問題