0

これと同様の問題が発生しましたが、最後の問題を解決したという手段がここでは機能していません。

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は「osr.Scriba」を使用してScribaを見ることができます。

私が問題を抱えているのは、さまざまなモジュールが互いのパブリック関数と変数のすべてに完全にアクセスできたのに対し、新しいモジュールと変数をいくつか追加し、古いものを削除した後も、FlashProfessionalは文字通り古いバージョン。モジュール内のコードヒントには、古いパブリック関数と変数がすべて表示されており、新しいものは表示されていません。

これは、私がアクセスできないある種の一時ファイルと関係があると思います。今週は絶対にこれが必要です!

私の.flaは「Tester.fla」で、ドキュメントクラスは「osr.as」です。それらは両方とも同じディレクトリにあります。また、同じディレクトリには、すべてのTrailcrestモジュールを含むフォルダ構造「/ trailcrest / v1 /s3/」があります。

ヘルプ??

編集:あるTrailcrestクラスを別のTrailcrestクラス(つまりosr.Sonus.foo)から参照しようとすると、...

TypeError:エラー#1009:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。

私は疑いの余地なくすべての参照を確認しました。

4

2 に答える 2

1

これは、最終的には検証エラーに至る古い問題です。これは、「クラス A」を 1 つ以上のアプリケーション、モジュール、swfs などに埋め込むときに発生します。最終的に、「クラス A」が変更された場合、「クラス A」を使用するすべての出力 swf を再コンパイルする必要があります。そうしないと、1 つのモジュールには新しい実装があり、他のモジュールにはないという状況になります。この問題は、アプリケーション ドメインが同じ名前/パッケージのクラスに遭遇したときに「最初に勝つ」と定義されているという事実によって悪化します。つまり、古いものが最初に参照された場合、後でロードされた新しいものが無視されます。

より恒久的な解決策は、最終的にすべてのモジュールが使用する「IClassAImpl」インターフェイスも実装する実際の「クラス A」参照を RSL が制御できるようにする RSL へのクラス昇格を使用することです。これにより、コンパイラは、実際のクラス自体を実際に埋め込むことなく、既知の署名と参照を相互リンクできます。

于 2012-11-12T22:10:09.133 に答える
0

なるほど、やっとわかった。何が起こっていたのかについてのスキニーは次のとおりです。

#1: Flash はどうやら Trailcrest モジュールの古いバージョンをプルしていたようです。これを改善するために、すべてをバックアップしてから、コンピューター全体から Trailcrest の古いインスタンスをすべて削除しました。次に、新しいモジュールだけを元に戻します。これにより、古いモジュールと変数を示すコードヒントの問題が修正されました。

#2: 参照がすべて正しいにもかかわらず、ある Trailcrest クラスが別の Trailcrest クラスのコンポーネントにアクセスしようとするたびに、エラー #1009 が発生していました。

原因は、ドキュメント クラス osr.as から関数の外部で、さまざまなモジュールの関数を直接呼び出していたことです。もちろん、これはプログラムの開始時に実行されます。

osr.Sonus.fooただし、1 つの Trailcrest クラス内で別のTrailcrestクラスを呼び出した (つまり. これは、問題のコードがクラスを初期化したコードよりもかなり下にあったにもかかわらず発生しました (私の質問を参照してください)。

これを修正するには、問題のコードをドキュメント クラスの public static 関数にラップし、それをタイムラインから呼び出すだけで済みました。これにより、相互参照を試みる前にすべてのクラスが確実に初期化されました。

言うまでもなく、今ではすべてが油を差した機械のように動いています。奇妙だ。

なぜこれが問題を解決したのかについての説明を歓迎します。

于 2012-11-17T00:04:35.403 に答える