2012-04-02 37 views
0

我現在有上具有以下類劇本的移動應用程序:AS3/Flex的 - persistNavigatorState +與ArrayCollection的對象()

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

我也有persistNavigatorState="true"ViewNavigatorApplication

假設在我有我的電話creationComplete="init()"下面我第一種觀點:

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]); 
} 

執行時,一切工作正常在我的應用程序。但是,由於我希望會話在用戶不小心關閉應用程序的情況下持續進行,因此當他重新打開該應用程序時,數據應該仍然存在。

而是,當我關閉並重新打開我的應用程序時,只有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%確定的,但我最近在處理移動應用程序時想知道這類問題。

我相信你的問題可能會發生B/C你在視圖上手動設置數據,而不是通過ViewNavigator.pushView()方法將其傳遞到視圖。

我剛剛瀏覽了源代碼,它看起來像直接在View上設置數據將繞過ViewNavigator的數據持久性。雖然這麼說,我不知道爲什麼它甚至會記住該字符串:)值

我會盡量做到以下幾點:

  • 沒有從裏面設置視圖的數據屬性看來,因爲你是在creationComplete處理函數
  • 如果可能的話現在這樣,使用ViewNavigatorApplication的「的firstView」屬性在MXML
  • 如果可能的話,在MXML初始化「firstViewData」屬性(可能是不可能的)
  • 如果你不能在你的appl中完成以上兩項ication的啓動代碼調用navigator.pushView(View_Class_Name,foo)來傳入數據。
+0

我嘗試了上述所有的東西,並且仍然以非常不可思議的方式工作。非常感謝,但我認爲我原來的問題不是我面臨的問題。現在,更多的是獲取自定義對象以保存數據(即,data.my_custom_object = some_custom_object),以在移動設備關閉並打開時保存並保留。 – 2012-04-04 22:08:19

相關問題