Пользовательский класс AS3 не обновляется

У меня была похожая проблема с этим, но средства, которые я решил последний, здесь не работают.

У меня есть собственный класс, который состоит из 12 отдельных модулей.as. Они объявлены в классе документа следующим образом:

import trailcrest.v1.s3.averta;
import trailcrest.v1.s3.chronos;
import trailcrest.v1.s3.eripio;
import trailcrest.v1.s3.fabrilla;
import trailcrest.v1.s3.gradua;
import trailcrest.v1.s3.lingua;
import trailcrest.v1.s3.navigare;
import trailcrest.v1.s3.pedem;
import trailcrest.v1.s3.praeferre;
import trailcrest.v1.s3.scriba;
import trailcrest.v1.s3.securos;
import trailcrest.v1.s3.sonus;

public static var Averta:averta = new averta();
public static var Chronos:chronos = new chronos();
public static var Eripio:eripio = new eripio();
public static var Fabrilla:fabrilla = new fabrilla();
public static var Gradua:gradua = new gradua();
public static var Lingua:lingua = new lingua();
public static var Navigare:navigare = new navigare();
public static var Pedem:pedem = new pedem();
public static var Praeferre:praeferre = new praeferre();
public static var Scriba:scriba = new scriba();
public static var Securos:securos = new securos();
public static var Sonus:sonus = new sonus();

Это новая версия кода. Я могу успешно ссылаться на все эти классы и публичные переменные и функции внутри класса документа "osr.as". Я также могу ВИДЕТЬ один модуль из другого (т.е. Sonus может видеть Scriba, используя "osr.Scriba").

Проблема в том, что, несмотря на то, что различные модули раньше имели полный доступ ко всем открытым функциям и переменным друг друга, после того, как я добавил некоторые новые модули и переменные и удалил некоторые старые, Flash Professional все еще буквально ИСПОЛЬЗУЕТ старая версия. Внутри любого модуля подсказки кода показывают все старые общедоступные функции и переменные, а не новые.

Я предполагаю, что это как-то связано с каким-то временным файлом, к которому я не могу добраться. Мне абсолютно необходимо, чтобы это работало на этой неделе!

Мой.fla - "Tester.fla", а класс документа - "osr.as." Они оба в одном каталоге. Также в том же каталоге находится структура папок "/trailcrest/v1/s3/", которая содержит все модули Trailcrest.

Помогите??

РЕДАКТИРОВАТЬ: всякий раз, когда я пытаюсь сослаться на один класс Trailcrest из другого класса Trailcrest (т.е. osr.Sonus.foo ), Я получил...

Ошибка типа: ошибка № 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект.

Я без тени сомнения подтвердил все ссылки.

2 ответа

Решение

Ну, я наконец-то понял это. Вот то, что происходило:

# 1: Flash явно тянул старую версию модулей Trailcrest. Чтобы исправить это, я сделал резервную копию всего, а затем удалил все старые экземпляры Trailcrest со всего моего компьютера. Затем я положил обратно только новые модули. Это исправило проблему с подсказками кода, показывающими старые модули и переменные.

№ 2: Я сталкивался с ошибкой № 1009, когда один класс Trailcrest пытался получить доступ к любому компоненту другого класса Trailcrest, даже если все ссылки были правильными.

Причиной было то, что я вызывал функции в различных модулях непосредственно из класса документа osr.as, вне функции. Это, конечно, выполняется при запуске программы.

Однако весь код внутри одного класса Trailcrest, который вызвал другой класс Trailcrest (т.е. osr.Sonus.foo) не сможет получить доступ к "foo", потому что osr.as по тем или иным причинам не завершил инициализацию классов до того, как запустил код, который их вызывал. Это произошло, хотя код проблемы был значительно ниже кода, который инициализировал классы (см. Мой вопрос).

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

Излишне говорить, что теперь все работает как хорошо смазанная машина. Как странно.

Я приветствовал бы любое объяснение, ПОЧЕМУ это решило проблему.

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

Более постоянное решение заключается в использовании повышения класса в RSL, которое в конечном итоге позволяет RSL контролировать фактическую ссылку "Класс A", в которой он также реализует интерфейс "IClassAImpl", который используют все модули. Это позволяет компилятору связывать ссылку с сигнатурой, о которой он знает, без фактического внедрения самого класса.

Другие вопросы по тегам