【问题标题】:null object reference error with pushView()pushView() 的空对象引用错误
【发布时间】:2013-12-05 13:19:42
【问题描述】:

据说我可以在使用navigator.pushView()method 将视图推送到屏幕时传递任何类型的数据。我只是简单地传递一个数组,如:

var arr:Array=[4,5,6,7,8,9];
navigator.pushView(SecondView,arr);

在我的 SecondView 构造函数中,无论我如何尝试访问它的数据属性,我都会得到一个错误:

无法访问空对象引用的属性或方法。

我做错了吗?

【问题讨论】:

  • 您最终是否会对 SecondViews“数据”属性中的数据进行处理?取自 Api 文档:“数据指定传递给视图的任何数据。此对象被写入新视图的 View.data 属性。” (help.adobe.com/en_US/flex/mobileapps/…) 所以如果你在 SecondView 的 data 属性的 setter 中做一些事情,这可能会导致麻烦。
  • 好吧,除了 pushView() 方法外,我没有对 SecondView 的数据做任何事情。我有一个 commonView(extends View) 类,它指定了它自己的宽度和高度属性等,并且确实没有改变它的数据。我的 SecondView 扩展了 commonView,如果它会导致 null 数据?如果是这样,我应该如何访问在 pushView() 方法中准确传递给 SecondView 的数据?谢谢

标签: apache-flex view flex-spark


【解决方案1】:

必须调用构造函数来创建对象的实例。这必须在该对象的任何属性被赋予值之前完成。

因此,我总是希望构造函数中的 data 属性为 null。

阅读Flex Component LifeCycle。第 1 步和第 2 步是这个问题的重点:

  1. 你调用组件的构造函数...
  2. 您可以通过设置组件的属性来配置组件...

您必须在某个时候访问 data 属性,而不是在构造函数中。可能在事件监听器中,例如初始化或创建完成。可能作为生命周期方法的一部分,例如 updateDisplayList() 或 commitProperties()。

【讨论】:

  • 非常感谢您两次帮助我!哈哈,我曾经认为这可能是构造函数的问题,并在我的视图中添加了一个 Event.ADDED 的 EventListener,但是这个事件在 pushView() 方法期间调度了很多次。也许我应该尝试其他一些事件类型来做到这一点。我想像你一样做另一件事:我调用了 PopupManager.addPopUp() 以在我的一个视图中显示一个警报窗口,代码已执行,但该窗口从未出现过。但是当我将这些代码放入根应用程序时( ViewNavigatorApplication),并从我的视图中调用它,它可以工作。如果我只能以这种方式使用弹出窗口?
  • @Hubcin 无需审查您的代码;很难猜测可能是什么问题。您应该能够从任何组件创建弹出窗口。也许你应该就这个问题发表一个更详细的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2016-01-14
  • 2015-03-08
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多