我遇到了类似的问题,但我解决了最后一个问题的方法在这里没有用。
我有一个由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。
我遇到麻烦的是,虽然各种模块曾经能够完美地访问彼此的所有公共函数和变量,但在我添加了一些新模块和变量并删除了一些旧模块和变量后, Flash专业人士仍然使用旧版本。在任何模块内部,代码提示显示所有旧的公共函数和变量,而不显示任何新的公共函数和变量。
我猜这与某些我无法达到的临时文件有关。本周我绝对需要这个工作!
我的.fla是“Tester.fla”,文档类是“osr.as”。他们都在同一个目录中。同一目录中还有文件夹结构“/ trailcrest / v1 / s3 /”,其中包含所有Trailcrest模块。
帮助??
编辑:每当我尝试从另一个Trailcrest类(即osr.Sonus.foo
)引用一个Trailcrest类时,我得到......
TypeError:错误#1009:无法访问null的属性或方法 对象参考。
我已经确认了所有参考资料。
答案 0 :(得分:1)
这是一个古老的问题,最终归结为验证错误。当您在一个或多个应用程序,模块,swfs等中嵌入“A类”时会发生这种情况。最终,当“A类”更改时,必须重新编译使用“A类”的每个输出swf。否则,最终会出现1个模块具有较新实现但其他模块没有实现的情况。当应用程序域遇到相同名称/包的类时,应用程序域被定义为“赢得第一”这一事实,这意味着如果首先引用旧的应用程序域,则稍后加载的较新的应用程序域将被忽略。 / p>
更永久的解决方案是将类升级用于RSL,最终允许RSL控制实际的“A类”引用,在该引用中它还实现所有模块使用的“IClassAImpl”接口。这允许编译器将引用与它知道的签名交叉链接,而不实际嵌入实际的类本身。
答案 1 :(得分:0)
好吧,我终于明白了。以下是发生的事情:
#1:Flash显然正在推出旧版本的Trailcrest模块。为了解决这个问题,我备份了所有内容,然后从我的整个计算机中删除了所有旧的Trailcrest实例。然后,我只回放了新模块。这解决了代码提示显示旧模块和变量的问题。
#2:每当一个Trailcrest类试图访问另一个Trailcrest类的任何组件时,我遇到错误#1009,即使引用都是正确的。
原因是我在一个函数之外直接从文档类osr.as调用各个模块上的函数。当然,这在程序启动时执行。
但是,一个Trailcrest类中调用另一个Trailcrest类(即osr.Sonus.foo
)的所有代码都无法访问“foo”,因为osr.as由于某种原因还没有完成初始化类在它运行调用它们的代码之前。即使问题代码远低于初始化类的代码(参见我的问题),也会发生这种情况。
要解决这个问题,我只需将问题代码包装到文档类中的公共静态函数中,然后从时间轴中调用它。这确保了所有类在尝试相互引用之前都已初始化。
毋庸置疑,现在一切都像一台运行良好的机器一样运行。多奇怪。
我欢迎任何解释,为什么这解决了问题。