Как избежать VerifyError при тестировании кода с использованием мобильных классов в AIR / AS3? - PullRequest
2 голосов
/ 15 октября 2010

Я опытный разработчик AS3, впервые занимающейся разработкой AIR для создания приложения для iPhone.Я пытаюсь учесть переменную ориентацию устройства с помощью StageOrientationEvent и связанных классов, и я получаю VerifyError при попытке выполнить тестирование на настольном компьютере, предположительно, потому что связанные с ориентацией классы зависят от мобильного устройства.

Документы Adobe для упаковщика iPhone подразумевают, что можно тестировать приложение, содержащее специфичный для мобильных устройств код, при условии, что вы используете флаги, такие как Stage.supportsOrientationChange, для проверки возможностей перед их фактическим использованием.К сожалению, похоже, что AIR проверяет неприемлемые классы при запуске, поэтому проверка бесполезна.

Как я могу тестировать это приложение на рабочем столе, не комментируя специфический для мобильного кода код каждый раз, когда я переключаю устройства?

Соответствующий код:

package 
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageOrientation;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.StageOrientationEvent;

public class Main extends Sprite 
{
    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        if (Stage.supportsOrientationChange) 
        {
            stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChange);
        }
    }

    private function onOrientationChange(event:StageOrientationEvent):void
    {
        switch (event.afterOrientation) 
        {
            case StageOrientation.DEFAULT: //ignore.  Landscape.
                break;
            case StageOrientation.ROTATED_RIGHT:
                    stage.setOrientation(StageOrientation.ROTATED_RIGHT);
                break;
            case StageOrientation.ROTATED_LEFT:
                stage.setOrientation(StageOrientation.ROTATED_LEFT);
                break;
            case StageOrientation.UPSIDE_DOWN: //ignore.  Landscape.
                break;
        }
    }
}

}

И ошибку получаю:

[Fault] exception, information=VerifyError: Error #1014: Class flash.events::StageOrientationEvent could not be found.

Ответы [ 2 ]

1 голос
/ 22 июня 2013

Лучший способ справиться с этим - обернуть код оператором if следующим образом:

if(ApplicationDomain.currentDomain.hasDefinition("flash.events.StageOrientationEvent")){
    if(Stage.supportsOrientationChange)
    stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChange);
}

Затем добавление универсальной функции события и приведение результирующего события к классу StageOrientationEvent:

private function orientationChange(event : Event):void{
    switch ((event as StageOrientationEvent).afterOrientation) {
        case StageOrientation.DEFAULT:
           break;
    }
}
0 голосов
/ 06 ноября 2010

Удалите или прокомментируйте все, что вам не нужно, или это не полностью поддерживается для тестирования на рабочем столе. Другая вещь, которую вы можете сделать, это попробовать другой обходной путь, кроме StageOrientation. Хороший пример использования акселератора и ширины и высоты рабочей области для получения ориентации устройства.

...