在AIR for iOS中加载并重新加载外部SWF

我发现有关如何加载一个或多个外部SWF文件的信息,与我的AIR iOS应用程序打包在一起,实际工作代码是:

var myUrlRequest:URLRequest = new URLRequest(mySWF); var myLoaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null); var loader: Loader = new Loader(); loader.load(myUrlRequest, myLoaderContext); Object(root).MK.addChild(loader) 

它可以在Android设备和Windows PC上运行,但是在iOS上,它仅在第一次加载外部SWF。 在我的项目中,我有几个加载外部SWF的button,但是每个button只是第一次工作。

任何想法? 如果我不能重新加载SWF,这似乎是非常有用的。

如果你不能再次加载某个东西,那么最好简单地caching一下,并且只加载一次呢?

处理这个问题的好方法是首次将SWF文件加载到单独的影片剪辑中,然后在随后需要“加载”它们时,只显示已加载SWF文件的影片剪辑。

您无法加载包含任何ActionScript ByteCode(ABC)的SWF文件,然后将其卸载并重新加载到iOS上。 如果您尝试这样做,则运行时将引发错误3764。

加载SWF的时候,即使没有代码,我也遇到了问题。 我find的解决scheme取决于代码是从应用程序区域(与应用程序打包在一起),还是从外部加载(无论是从Web还是下载到caching文件夹)。 我写了一篇关于这里的扩展文章,如果你有兴趣: http : //www.eqsim.com/blog/? p=400简而言之,这里是我设置path的代码:

 var moduleDirectoryPath = "/modules/"; if (externalContent == FROM_CACHE) { moduleDirectoryPath = File.cacheDirectory.url + moduleDirectoryPath; } else if (externalContent == FROM_WEB) { moduleDirectoryPath = "http://our-online-content.com" + moduleDirectoryPath; } 

那么这里是我准备的path的代码,如果SWF是从应用程序区域或其他(caching或networking):

 if (loadFromApp) { path = moduleDirectoryPath + module_folder + "/" + module + "?nf="+getTimer(); } else { path = moduleDirectoryPath + module_folder + "/" + module; } 

最后,我的加载语句:

 request = new URLRequest(path); request.cacheResponse = false; request.useCache = false; _lc = new LoaderContext(false, ApplicationDomain.currentDomain, null); moduleLoader.load(request, _lc); 

现在我可以加载SWF并重新加载它们(更重要的是)。 当然,SWF没有字节码。