2016-07-05 5 views
8

バージョン4.2.0からNuGet経由でMvvmCrossバージョン4.2.1にアップデートしました。起動時にAndroidプロジェクトがクラッシュするようになりました。 MvxExceptionがメッセージと共にスプラッシュ画面中にスローされます。DownloadCacheを使用する前にFileプラグインでEnsureLoadedを呼び出す必要があります

MvvmCross.Platform.Exceptions.MvxException:あなたは、私が実際にこれを呼び出していますDownloadCache

を使用する前に、ファイルのプラグインにEnsureLoaded を呼び出す必要がありますメソッドをオーバーライドします(MvxAppCompatSetup.InitializeLastChance)。これはバージョン4.2.0でうまくいきましたが、バージョン4.2.1を実行しているときにコードはInitializeLastChanceになっていません。そこにプラグインがまだ

を初期化されていないので、私は例外を取得しますが、型MvvmCross.Platform.Plugins.IMvxPluginManagerを解決するために失敗したため、

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

私はInitializeFirstChanceEnsureLoaded呼び出しを移動することはできません

MvxSetup.InitializePluginFrameworkは、InitializePluginFrameworkが呼び出されたときにこの例外をスローするようです。

NuGetは、私は、更新時にインストールされている各プラグインのエラーメッセージが表示される:

[失敗]ファイルをファイルではありませんでした」... \ Project.Droid \ Bootstap XXXBootstrap.cs \

ファイルが確実に存在し、パッケージはエラーを報告することなくインストールされます。

この問題を解決する正しい方法は何ですか?

答えて

5

DownloadCachePluginBootstrap.csとFilePluginBootstrap.csを削除しようとすると、InitializeLastChance()内で手動設定が行われます。読み込み順序に問題があるようです。

+0

これは問題を修正するようです。 –

+0

Ok上記のファイルをBootstrapフォルダから削除し、InitializeLastChance()メソッドでロード順序を明示的に定義することで、問題を解決するようです。 InitializeLastChanceの詳細については、[個別のカスタマイズ](https:// github。MvvmCross.Plugins.File.PluginLoaderタイプのプラグインローダーが見つかりませんでした。ここで説明しているもう少し長めの回避策があります。https://www.mvvmCross/MvvmCross/mvvmCross/wiki /カスタマイズとアプリケーションとセットアップを使用したカスタマイズ – JohnnyJaxs

+1

//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); 
    } 
関連する問題