2016-07-05 63 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); 
    } 
相關問題