Статическая переменная с нулевым значением - PullRequest
1 голос
/ 13 февраля 2012

У меня есть класс с именем Locator, который я использую для GeoLocate пользователя. В этом классе есть статический метод с именем locate (). Затем этот метод вызывает другой метод, который устанавливает статическую переменную с именем loc для экземпляра класса LngLat.

Проблема, с которой я столкнулся, заключается в том, что когда я вызываю метод locate в кадре 1 на сцене, а затем пытаюсь получить доступ к переменной loc, она отображается как нулевая ... но когда я отслеживаю переменную loc после ее установки в класс Locator, который он показывает как объект.

Когда я делаю это (в кадре 1):

Locator.locate();
trace(Locator.loc.getCity());

ноль отслеживается.

Но когда у меня это в кадре 1:

Locator.locate();

и затем проследите переменную в конце статического метода в классе Locator, который он показывает как объект, и город отслеживается, как и ожидалось.

Есть идеи?

P.S Я плохо объяснил это, извините.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 февраля 2012

Этот ответ является наиболее вероятным, используя предоставленную вами небольшую информацию.

Исходя из того, что контекст захватывает местоположение, вполне вероятно, что вы взаимодействуете с какой-то серверной технологией (то есть базой данных, полной координат).

Чтобы достичь этого, вы должны использовать URLLoader.

Когда вы инициализируете экземпляр URLLoader и пытаетесь собрать информацию от третьей стороны, запрошенная информация будет получена в то время, которое асинхронно . Это означает, что функция, ожидающая вызова, когда флэш-память получает данные, которые вам нужны, может быть вызвана в любом месте в ближайшем будущем, но не сразу.

Вот эксперимент:

var data:Object = null;
var loader:URLLoader;

function test():void
{
    loader = new URLLoader();
    var request:URLRequest = new URLRequest("https://projectavian.com/files/example.php");

    loader.load(request);
    loader.addEventListener(Event.COMPLETE, _done);
    stage.addEventListener(Event.ENTER_FRAME, _check);
}


function _done(e:Event):void
{
    data = e.target.data;
    trace(data);

    loader.removeEventListener(Event.COMPLETE, _done);
    stage.removeEventListener(Event.ENTER_FRAME, _check);
}

function _check(e:Event):void
{
    trace(data);
}


test();
trace(data); // This will always be null even after all the work above.

Если вы запустите это, вы заметите, что data всегда изначально null.

Мое предположение состоит в том, что вашему Locator.locate() требуется некоторое время для сбора необходимой информации, а затем присваивается значение тому, что Locator.loc.getCity() возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...