2016-07-05 33 views
8

我已经通过NuGet从版本4.2.0更新到MvvmCross 4.2.1版,现在Android项目在启动过程中崩溃。一个MvxException是闪屏与消息时抛出:在使用DownloadCache之前,您必须在File插件上调用EnsureLoaded

MvvmCross.Platform.Exceptions.MvxException:使用DownloadCache

我其实调用此之前,你必须调用EnsureLoaded 上的文件的插件方法在MvxAppCompatSetup.InitializeLastChance覆盖。 4.2.0版对我来说效果很好,但是现在运行版本4.2.1时,代码甚至没有达到InitializeLastChance

protected override void InitializeLastChance() 
{ 
    base.InitializeLastChance(); 
    MvvmCross.Plugins.File.PluginLoader.Instance.EnsureLoaded(); 
    MvvmCross.Plugins.DownloadCache.PluginLoader.Instance.EnsureLoaded(); 
} 

因为插件尚未初始化

我不能移动EnsureLoaded调用InitializeFirstChance,因为那里我会得到一个异常无法解析类型MvvmCross.Platform.Plugins.IMvxPluginManager

当调用InitializePluginFramework时,MvxSetup.InitializePluginFramework似乎会抛出此异常。

的NuGet显示错误消息我在更新过程中已安装的每个插件:

[失效]无法提交文件” ... \ Project.Droid \ Bootstap \ XXXBootstrap.cs'

文件肯定存在,并且安装该软件包时不报告错误。

解决此问题的正确方法是什么?

回答

5

尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs,只需在InitializeLastChance()内部手动设置即可。看起来加载顺序有问题。

+0

这似乎解决了这个问题。 –

+0

好吧,通过从Bootstrap文件夹中删除上述文件并明确定义方法InitializeLastChance()中的加载顺序,它似乎解决了问题。关于InitializeLastChance的更多信息,可以在[个人定制](https:// github。com/MvvmCross/MvvmCross/wiki/Customizing-using-App-and-Setup) – JohnnyJaxs

+1

对于那些现在面临MvxException的用户:找不到类型为MvvmCross.Plugins.File.PluginLoader的插件加载器, //github.com/MvvmCross/MvvmCross-Plugins/issues/119#issuecomment-233129197 – foxanna

3

由于@Piotr提到:

尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs只是 离开手动设置内部InitializeLastChance()。看起来加载顺序有一个 问题。

这也解决了我的问题。

我只是想在iOS项目的Setup.cs中分享我的代码,因为我认为这是更好的实现。我没有使用InitializeLastChance()。相反,我用AddPluginsLoadersLoadPlugins

protected override void AddPluginsLoaders(MvxLoaderPluginRegistry registry) 
    { 
     registry.Register<MvvmCross.Plugins.File.PluginLoader, MvvmCross.Plugins.File.iOS.Plugin>(); 
     registry.Register<MvvmCross.Plugins.DownloadCache.PluginLoader, MvvmCross.Plugins.DownloadCache.iOS.Plugin>(); 
     base.AddPluginsLoaders(registry); 
    } 

    public override void LoadPlugins(IMvxPluginManager pluginManager) 
    { 
     pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.File.PluginLoader>(); 
     pluginManager.EnsurePluginLoaded<MvvmCross.Plugins.DownloadCache.PluginLoader>(); 
     base.LoadPlugins(pluginManager); 
    } 
相关问题