2012-04-02 7 views
0

Ich habe derzeit eine mobile Anwendung auf dem Textbuch, das die folgende Klasse hat:AS3/Flex - persistNavigatorState + Objekte mit Arraycollection()

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

Ich habe auch persistNavigatorState="true" in meinem ViewNavigatorApplication.

Es wäre in meinem ersten Blick ich in meinem creationComplete="init()" Aufruf folgende Voraussetzungen erfüllt sein:

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

Wenn er ausgeführt wird, funktioniert alles in meiner App in Ordnung. Da die Sitzungen jedoch beibehalten werden sollen, wenn der Benutzer die App versehentlich schließt, sollten die Daten beim erneuten Öffnen weiterhin vorhanden sein.

Stattdessen, wenn ich schließe und öffne meine App nur die myString Eigenschaft (dh Spuren "test_string", wie vorgesehen), aber die ArrayCollection wird nicht kopiert.

Ich habe folgendes mit ObjectUtil.clone() und ObjectUtil.copy() versucht:

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

und ich habe auch versucht:

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

aber das wirft mich nur Beliebig

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

Ideen, wie ArrayCollections und Foo-Klasse in einer mobilen Anwendung beibehalten werden?

Antwort

0

Ich bin mir nicht 100% sicher, aber ich habe mich über diese Art von Problem während der Arbeit an einer mobilen App vor kurzem gefragt.

Ich glaube, Ihr Problem könnte passieren b/c Sie setzen die Daten manuell auf die Ansicht, anstatt es in die Ansicht mit der ViewNavigator.pushView() Methode zu übergeben.

Ich habe gerade durch die Quelle geblättert, und es sieht so aus, als würde die Einstellung der Daten direkt auf der Ansicht die Datenpersistenz von ViewNavigator umgehen. Obwohl das gesagt, ich bin nicht sicher, warum es auch den Wert für diese String erinnern würde :)

Ich würde versuchen, die folgendes zu tun:

  • nicht setzen die Daten Eigenschaft Ansicht von innen die Ansicht, wie Sie jetzt in dem Handler creationComplete- tun
  • wenn möglich, verwenden Sie die „Firstview“ Eigentum von ViewNavigatorApplication in mxml
  • wenn möglich, initialisieren Sie die „firstViewData“ Eigenschaft in MXML (unter Umständen nicht möglich)
  • Wenn Sie die zwei oben, in Ihrer Anwendung nicht tun können ications Startup-Code call navigator.pushView (View_Class_Name, foo), um die Daten zu übergeben.
+0

Ich habe alle oben genannten versucht und die Dinge arbeiten immer noch in einer sehr wackeligen Art und Weise. Sehr geschätzt, aber ich denke, dass meine ursprüngliche Frage nicht das Problem war, dem ich gegenüberstand. Jetzt geht es eher darum, benutzerdefinierte Objekte in Daten zu speichern (z. B. data.my_custom_object = some_custom_object), um zu speichern und persistent zu bleiben, wenn das Handy ausgeschaltet und eingeschaltet wird. –