2016-07-05 10 views
8

Ho aggiornato a MvvmCross versione 4.2.1 dalla versione 4.2.0 tramite NuGet e ora il progetto Android si arresta in modo anomalo durante l'avvio. Un MvxException è gettato durante la schermata di avvio con il messaggio:È necessario chiamare GuaranteLoaded sul plug-in File prima di utilizzare DownloadCache

MvvmCross.Platform.Exceptions.MvxException: È necessario chiamare EnsureLoaded sul plug-in file prima di utilizzare il DownloadCache

Io in realtà sto chiamando questo metodo in override MvxAppCompatSetup.InitializeLastChance. Questo ha funzionato bene con la versione 4.2.0, ma ora il codice non ha nemmeno colpito InitializeLastChance quando si esegue la versione 4.2.1.

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

non riesco a spostare le EnsureLoaded chiamate a InitializeFirstChance perché non prendo un'eccezione perché i plugin non sono ancora stati inizializzati

Impossibile risolvere il tipo MvvmCross.Platform.Plugins.IMvxPluginManager

Il MvxSetup.InitializePluginFramework sembra lanciare questa eccezione quando viene chiamato InitializePluginFramework.

NuGet visualizzati messaggi di errore per ogni plugin che ho installato durante l'aggiornamento:

[Failure] Impossibile archiviare file' ... \ Project.Droid \ Bootstap \ XXXBootstrap.cs'

I file sono sicuramente lì e il pacchetto si installa senza riportare un errore.

Qual è il modo corretto di gestire questo problema?

risposta

5

Provare a rimuovere DownloadCachePluginBootstrap.cs e FilePluginBootstrap.cs basta lasciare l'installazione manuale all'interno di InitializeLastChance(). Sembra che ci sia un problema con l'ordine di caricamento.

+0

Questo sembrava risolvere il problema. –

+0

Ok rimuovendo i file sopra dalla cartella Bootstrap e definendo esplicitamente l'ordine di caricamento nel metodo InitializeLastChance() sembra che risolva il problema. Ulteriori informazioni su InitializeLastChance disponibili in [Personalizzazioni personalizzate] (https: // github.com/MvvmCross/MvvmCross/wiki/Personalizzazione-utilizzando-App-e-Setup) – JohnnyJaxs

+1

Per coloro che ora affrontano MvxException: Impossibile trovare il caricatore di plugin per il tipo MvvmCross.Plugins.File.PluginLoader c'è una soluzione un po 'più lunga descritta qui https: //github.com/MvvmCross/MvvmCross-Plugins/issues/119#issuecomment-233129197 – foxanna

3

Come accennato @Piotr:

tenta di rimuovere DownloadCachePluginBootstrap.cs e FilePluginBootstrap.cs solo lasciare configurazione manuale all'interno InitializeLastChance(). Sembra che ci sia un problema con l'ordine di caricamento.

Questo ha risolto il problema anche per me.

Voglio solo condividere il mio codice nel Setup.cs del progetto iOS perché penso che sia un'implementazione migliore. Non ho utilizzato InitializeLastChance(). Invece, ho usato AddPluginsLoaders e 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); 
    } 
Problemi correlati