AS3 / Flex - 带有ArrayCollection()的persistNavigatorState +对象

时间:2012-04-02 18:33:02

标签: actionscript-3 flex blackberry-playbook

我目前在Playbook上有一个移动应用程序,它有以下类:

[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:错误#1009:无法访问空对象引用的属性或方法。

有关如何在移动应用程序中保留ArrayCollections和Foo类的任何想法?

1 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但我最近在使用移动应用时想知道这类问题。

我相信您的问题可能正在发生b / c您是在View上手动设置数据,而不是使用ViewNavigator.pushView()方法将其传递到View中。

我只浏览了源代码,看起来直接在View上设置数据会绕过ViewNavigator的数据持久性。尽管如此,我不确定为什么它甚至会记住该字符串的值:)

我会尝试执行以下操作:

  • 不要在视图中设置View的数据属性,正如您现在在creationComplete处理程序中所做的那样
  • 如果可能,请在mxml
  • 中使用ViewNavigatorApplication的“firstView”属性
  • 如果可能,在mxml中初始化“firstViewData”属性(可能无法实现)
  • 如果你不能做上述两个,在你的应用程序的启动代码中调用navigator.pushView(View_Class_Name,foo)来传入数据。