VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围
项目中,出现报错: VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围?问题出现在执行TweenMax 操作出现的,项目中有很多模块在运行期载入swf功能模块,每个swf都是相对独立的程序,载入主程序中做为功能模块,这样主程序中很多功能可以由很多个swf组成,由不同的人员去开发,这是模块开发的一点好处。模块也有很多问题的,上面的报错大都是由于这类开发模式所带来的直接成果。相对一个独立开发的人程序员来说,这种问题很难会遇到 。flash 的abc文件,并不陌生,在使用第三方SWC类库或导出为SWC库为,flex(flash builder)所用时,在引用的SWC类库可以查看到SWC其内部的元素及结构,里面的很多as文件被编译成了*.abc文件,这个abc文件就是flash player 虚拟机可以直接执行的二进制文件。那出现这个:VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围错误,就不难理解是TweenMax 这个as类的二进制.abc 文件的完整性及同一个TweenMax的文件的MD5值不一样出的问题了。 SO: a.swf b.swf c.swf 这三个swf文件同时使用了TweenMax类,也同时在main.swf 里面,如果a b c 使用不同版本的TweenMax。在Main.swf 里面没有用到或运行到TweenMax,此时会报错:VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围。?说了这么多,问题就在a b c 里使用了不同版本的TweenMax,并且Main.swf 里面没有使用到或运行过TweenMax,flash player 虚拟机无法决定使用哪个版本的TweenMax。 解决这个错误,只要在Main.swf使用一下TweenMax,这样后来加载进来的a b c 就都会使用在Main.swf里使用的那个tweenMax.其二:就是要保证 a b c 或后来再有d e f 等使用TweenMax的同一个。
引用自 SIX4 的微博。
实际项目中用TweenLite 替换掉了TweenMax ,问题解决
VerifyError: Error #1107: ABC 数据已损坏,尝试的读取操作超出范围