Flex Mobile Почему persistNavigatorState = "true" и stage.setAspectRatio (StageAspectRatio.PORTRAIT) не смешиваются? - PullRequest
0 голосов
/ 15 ноября 2011

Почему я не могу использовать persistNavigatorState = "true" и stage.setAspectRatio (StageAspectRatio.PORTRAIT) вместе в инициализирующей программе.

<s:View ...creationComplete="init()">

защищенная функция init (): void {

stage.setAspectRatio (StageAspectRatio.PORTRAIT);
}

    [SWF] Main.swf - 3,394,828 bytes after decompression
    TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at views::Try01/init()[C:\Users\James\Adobe Flash Builder 4.5\myProgram\src\views\Try01.mxml:19]
    at views::Try01/___Try01_View1_creationComplete()[C:\Users\James\Adobe Flash Builder 4.5\myProgram\src\views\Try01.mxml:4]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
    at mx.core::UIComponent/set initialized()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:1818]
    at mx.managers::LayoutManager/validateClient()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1090]
    at mx.core::UIComponent/validateNow()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8067]
    at spark.components::ViewNavigator/commitNavigatorAction()[E:\dev\4.5.1\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1878]
    at spark.components::ViewNavigator/commitProperties()[E:\dev\4.5.1\frameworks\projects\mobilecomponents\src\spark\components\ViewNavigator.as:1236]
    at mx.core::UIComponent/validateProperties()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8209]
    at mx.managers::LayoutManager/validateProperties()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:597]
    at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:783]
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]

Всякий раз, когда я включаю persistNavigatorState, моя программа выигрывает 'Т беги.Есть ли способ использовать оба вместе?Спасибо

[Строка 4] creationComplete="init()"

    protected  function init():void {


[Line 19]  stage.setAspectRatio(StageAspectRatio.PORTRAIT);

    }

1 Ответ

2 голосов
/ 15 ноября 2011

Возможно, событие creationComplete сработает до того, как сцена станет доступна. Использование persistNavigatorState немного меняет поведение при запуске вашего приложения, сначала извлекая информацию о состоянии вашего навигатора из постоянного кэша. Эта строка в документах Flex довольно показательна: при перезапуске приложения восстанавливается только состояние текущего ViewNavigator . Кроме того, этап в flex не доступен, пока объект не добавлен в displayList. Поэтому, если вы позвоните setAspectRatio, когда сцена пуста, вы получите нулевую ссылку на объект.

Вместо того, чтобы использовать stage.setAspectRatio (StageAspectRatio.PORTRAIT) для creationComplete, вы можете попробовать установить параметр, включающий <aspectRatio>portrait</aspectRatio> в ваш app.xml.

Или вы можете прослушать событие addToStage в своем представлении и вызвать stage.setAspectRatio(StageAspectRatio.PORTRAIT) в обработчике событий. Таким образом, вы точно знаете, что сцена доступна.

Ссылки:

...