在使用DownloadCache之前,必须在File插件上调用EnsureLoaded

时间:2016-07-05 20:39:24

标签: mvvmcross

我已经通过NuGet从版本4.2.0更新到MvvmCross版本4.2.1,现在Android项目在启动时崩溃了。在初始屏幕中抛出MvxException,并显示以下消息:

  

MvvmCross.Platform.Exceptions.MvxException:您必须调用EnsureLoaded   在使用DownloadCache

之前的File插件上

我实际上是在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

MvxSetup.InitializePluginFramework在调用InitializePluginFramework时似乎抛出此异常。

NuGet显示了我在更新期间安装的每个插件的错误消息:

  

[失败]无法归档文件' ... \ Project.Droid \ Bootstap \ XXXBootstrap.cs'

文件肯定存在,软件包安装时没有报告错误。

处理此问题的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs,只需将手动设置保留在InitializeLastChance()中。加载订单似乎存在问题。

答案 1 :(得分:3)

正如@Piotr所说:

  

尝试删除DownloadCachePluginBootstrap.cs和FilePluginBootstrap.cs   在InitializeLastChance()中留下手动设置。似乎有一个   加载订单的问题。

这也为我解决了这个问题。

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

    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);
    }