2017-10-18 2 views
2

I-Setup erstellt: MvxAndroidSetupSystem.MissingMethodException: Methode 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' nicht gefunden

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 mvvmscross Version 5.2.1 Ich habe Ausgabe in Zeile Code var mvxFragmentsPresenter mit = new MvxFragmentsPresenter (AndroidViewAssemblies) ;. wenn benachrichtigen Projekt Visual Studio 2017 in Mac laufen, dass:

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 

Dank!

+0

Bitte posten Sie Ihre 'MvxFragmentsPresenter' Code. –

+0

Das gleiche Problem. Ich wette, dass es etwas mit Änderungen an Android Presenter zu tun hat, wie im Blog für 5.2 beschrieben: https://www.mvvmcross.com/mvvmcross-52-release/. Eingraben, um zu sehen, was das Problem sein könnte. BTW, läuft VS2015 in Win 7/10. – Igor

Antwort

0

Ich glaube, ich löste es aber sein am hinteren Ende einer langen Reise war auf die neueste Version MvvmCross (5.3.1) von Version 4.4.0 zu aktualisieren. Ich werde die Schritte identifizieren, die ich benötigt habe, um das Upgrade durchzuführen. Es sollte beachtet werden, dass ich zuvor alle Xamarin und andere Pakete auf den neuesten Stand gebracht habe und sichergestellt habe, dass das Projekt kompiliert und ausgeführt wird. Außerdem habe ich Xamarin selbst auf 4.7.10.22 aktualisiert, was Unterstützung für Android 8.0 brachte (ich habe noch kein iOS-Frontend). Hier sind die Schritte, die ich ging durch zu aktualisieren, um MvvmCross 5.3.1:

  • alle Pakete MvvmCross Upgrade auf 5.3.1
  • entfernen MvvmCross.Droid.Shared (4.4.0)
  • hinzufügen MvvmCross.Droid. Support.Core.UI (5.3.1)
  • hinzufügen MvvmCross.Droid.Support.Core.Utils (5.3.1)
  • hinzufügen MvvmCross.Droid.Support.Fragment (5.3.1)

Jetzt um deine Fragen zu beantworten, Ich habe meine Setup-Klasse in eine Unterklasse von MvxAppCompatSetup geändert. Rufen Sie an den MvxAppCompatSetup auf eine einfache Erstellung eines neuen MvxAppCompatViewPresenter geändert() (siehe unten) sowie die Entfernung von Import von MvvmCross.Droid.Shared.Presenter:

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

Zusätzlich, da war ich mit ein paar Fragmente , musste ich die Attribute auf sich aus MvxFragment zu MvxFragmentPresentation ändern. Letzte Änderung war meine Hauptaktivität von Unter Klassierung MvxCachingFragmentCompatActivity zu Unter Klassierung MvxAppCompatActivity zu ändern. All dies hat den Trick für mich gemacht und wird Ihnen hoffentlich helfen.

P.S. Ich muss die Navigation immer noch ändern, um dem neuen NavigationService zu entsprechen.

+0

Vielen Dank @igor Ich löste es durch Downgrade MvvmCross Version von 5.3.1 auf 5.1.1, weil MvvmCross.Droid.Share aktuelle Version 5.1.1 –

+0

Ja, das wird funktionieren, aber schließlich könnten Sie mit der Aussicht konfrontiert werden, zu adoptieren Das neue Android Presenter-Muster und die obigen Schritte helfen Ihnen dabei. Viel Glück. – Igor

+0

@VermoricHuynh Sie sollten mit Nachdruck der Lage sein, MvvmCross.Droid.Shared zu entfernen (es ist Code in bestehende Pakete IIRC gerollt) und dann andere Pakete aktualisieren, und es sollte funktionieren. –

Verwandte Themen