我目前在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类的任何想法?
答案 0 :(得分:0)
我不是百分百肯定,但我最近在使用移动应用时想知道这类问题。
我相信您的问题可能正在发生b / c您是在View上手动设置数据,而不是使用ViewNavigator.pushView()
方法将其传递到View中。
我只浏览了源代码,看起来直接在View上设置数据会绕过ViewNavigator的数据持久性。尽管如此,我不确定为什么它甚至会记住该字符串的值:)
我会尝试执行以下操作: