2017-10-18 12 views
2

I créé le programme d'installation: MvxAndroidSetupSystem.MissingMethodException: Méthode 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not found

public class Setup : MvxAndroidSetup 
{ 
    public Setup(Context applicationContext) 
     : base(applicationContext) 
    { 
    } 

    protected override IMvxApplication CreateApp() 
    { 
     return new App(); 
    } 

    protected override IEnumerable<Assembly> AndroidViewAssemblies => 
    new List<Assembly>(base.AndroidViewAssemblies) 
    { 
     typeof(Android.Support.Design.Widget.NavigationView).Assembly, 
     typeof(Android.Support.Design.Widget.FloatingActionButton).Assembly, 
     typeof(Android.Support.V7.Widget.Toolbar).Assembly, 
     typeof(Android.Support.V4.Widget.DrawerLayout).Assembly, 
     typeof(Android.Support.V4.View.ViewPager).Assembly, 
     typeof(MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView).Assembly 
    }; 

    /// <summary> 
    /// This is very important to override. The default view presenter does not know how to show fragments! 
    /// </summary> 
    protected override IMvxAndroidViewPresenter CreateViewPresenter() 
    { 
     var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies); 
     Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter); 
     return mvxFragmentsPresenter; 
    } 
} 

I avec la version 5.2.1 mvvmscross J'ai problème dans le code ligne var mvxFragmentsPresenter = new MvxFragmentsPresenter (AndroidViewAssemblies) ;. lorsque projet géré Visual Studio 2017 mac signaler que:

System.MissingMethodException: Method 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not found. 
    at VietOrder.Droid.Setup.CreateViewPresenter() [0x00001] in /Volumes/Data/Dev/VietOrder/Xamarin/VietOrder/VietOrder.Droid/Setup.cs:46 
    at MvvmCross.Droid.Platform.MvxAndroidSetup.CreateViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetup.cs:124 
    at MvvmCross.Core.Platform.MvxSetup.InitializeViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:260 
    at MvvmCross.Core.Platform.MvxSetup.InitializeSecondary() [0x000f8] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:91 
    at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__7_0 (System.Object ignored) [0x00000] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetupSingleton.cs:92 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x00007] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() [0x00021] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() [0x00074] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 

Merci!

+0

Veuillez poster votre code 'MvxFragmentsPresenter'. –

+0

Même problème. Je vous parie qu'il a quelque chose à voir avec les changements à Android Presenter comme décrit dans le blog pour 5.2: https://www.mvvmcross.com/mvvmcross-52-release/. Creuser pour voir ce que le problème pourrait être. BTW, exécutant VS2015 dans Win 7/10. – Igor

Répondre

0

Je pense que je l'ai résolu mais il était à la fin d'un long voyage pour mettre à niveau vers la dernière version MvvmCross (5.3.1) de la version 4.4.0. Je vais identifier les étapes nécessaires pour passer à travers la mise à niveau. Il convient de noter qu'avant cela, j'ai mis à jour tous les paquets Xamarin et autres vers le dernier et le plus grand et j'ai veillé à ce que le projet compile et fonctionne. En outre, j'ai mis à jour Xamarin lui-même à 4.7.10.22 qui a apporté le support pour Android 8.0 (je n'ai pas encore de front-end iOS). Voici les étapes je suis passé par mise à jour vers MvvmCross 5.3.1:

  • Mise à jour tous les paquets MvvmCross 5.3.1
  • Retirer MvvmCross.Droid.Shared (4.4.0)
  • Ajouter MvvmCross.Droid. Support.Core.UI (5.3.1)
  • Ajouter MvvmCross.Droid.Support.Core.Utils (5.3.1)
  • Ajouter MvvmCross.Droid.Support.Fragment (5.3.1)

Maintenant, pour répondre à vos questions, J'ai changé ma classe d'installation en sous-classe de MvxAppCompatSetup. Appel à la MvxAppCompatSetup changé à une simple création d'une nouvelle MvxAppCompatViewPresenter() (voir ci-dessous), plus la suppression de l'importation de MvvmCross.Droid.Shared.Presenter:

protected override IMvxAndroidViewPresenter CreateViewPresenter() 
{    
    return new MvxAppCompatViewPresenter(AndroidViewAssemblies); 
} 

En outre, depuis que j'utilisais quelques fragments , J'avais besoin de changer les attributs sur eux de MvxFragment à MvxFragmentPresentation. Le dernier changement consistait à changer mon activité principale du sous-classement MvxCachingFragmentCompatActivity à la sous-classe MvxAppCompatActivity. Tout cela a fait l'affaire pour moi et j'espère que je vais vous aider.

P.S. Je dois encore changer de navigation pour me conformer au nouveau NavigationService.

+0

Merci @igor Je l'ai résolu en déclassant la version MvvmCross de 5.3.1 à 5.1.1 parce que MvvmCross.Droid.Share version actuelle 5.1.1 –

+0

Oui, cela fonctionnera mais éventuellement vous pourriez être confronté à la perspective d'avoir à adopter le nouveau modèle de présentateur Android et les étapes ci-dessus vous aideront. Bonne chance. – Igor

+0

@VermoricHuynh vous devriez être en mesure de supprimer de force MvvmCross.Droid.Shared (son code est roulé dans les paquets existants IIRC), puis mettre à jour vos autres paquets et cela devrait fonctionner. –