2017-01-23 132 views
0

我試圖將現有的Xamarin.Android應用程序從mvvmcross 3.5升級到mvvmcross 4.4.0。我遵循this documentation,現在應用程序構建並啓動,顯示啓動畫面,但它不會瀏覽啓​​動畫面。當我撥打ShowViewModel<MainViewModel>()時,什麼都不會發生。我看到的最後一個應用程序輸出是下面的輸出。我目前不知道下一步要看的地方。任何人有想法?mvx:Warning:Exception masked ArgumentException:具有相同密鑰的項目已被添加

mvx:Warning: 17,87 Exception masked ArgumentException: An item with the same key has already been added. 
     at System.ThrowHelper.ThrowArgumentException (System.ExceptionResource resource) [0x0000b] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Collections.Generic.Dictionary`2[TKey,TValue].Insert (TKey key, TValue value, System.Boolean add) [0x0008e] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) [0x00000] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector, System.Collections.Generic.IEqualityComparer`1[T] comparer) [0x0005c] in <1a5e8b31a0e44a97a3b8f85920b2d059>:0 
    at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector) [0x00000] in <1a5e8b31a0e44a97a3b8f85920b2d059>:0 
    at MvvmCross.Droid.Shared.Presenter.FragmentHostRegistrationSettings.InitializeIfNeeded() [0x00128] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Shared.Presenter.FragmentHostRegistrationSettings.IsTypeRegisteredAsFragment (System.Type viewModelType) [0x00000] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Shared.Presenter.MvxFragmentsPresenter.Show (MvvmCross.Core.ViewModels.MvxViewModelRequest request) [0x0000c] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Views.MvxAndroidViewDispatcher+<>c__DisplayClass2_0.<ShowViewModel>b__0() [0x00000] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action action) [0x00019] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxAndroidViewDispatcher.ShowViewModel (MvvmCross.Core.ViewModels.MvxViewModelRequest request) [0x00014] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModelImpl (System.Type viewModelType, MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x0002e] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModel (System.Type viewModelType, MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x00000] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModel[TViewModel] (MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x00000] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxAppStart`1[TViewModel].Start (System.Object hint) [0x00013] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Droid.Views.MvxSplashScreenActivity.TriggerFirstNavigate() [0x00005] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxSplashScreenActivity.InitializationComplete() [0x00009] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__7_1() [0x0000a] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Platform.Core.MvxMainThreadDispatcher.ExceptionMaskedAction (System.Action action) [0x00000] in D:\git\MvvmCross\MvvmCross\Platform\Platform\Core\MvxMainThreadDispatcher.cs:22 
+0

您能否爲此提供一些複製步驟?堆棧跟蹤似乎沒有符號化,所以我只能猜測哪條線會失敗。 – Cheesebaron

+0

我想我終於找到了原因:應用程序在setup.cs中使用如下代碼:assemblies.Add(typeof(Android.Support.V4.Widget.DrawerLayout).Assembly);刪除此代碼後,導航似乎再次工作。但是我仍然在調查這個。 – Niels

+0

您是否發現了導致此問題的原因是我遇到了同樣的問題。如果你可以發佈解決方案或原因,這將是一個很大的幫助。謝謝 – rideintothesun

回答

2

的問題是,升級到MvvmCross 4之前,我們有我們自己的執行protected override IMvxAndroidViewPresenter CreateViewPresenter()Setup.cs。升級之後,我們改變了這種實現的(標準)實現:

protected override IMvxAndroidViewPresenter CreateViewPresenter() 
    { 
     var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies); 
     Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter); 
     return mvxFragmentsPresenter; 
    } 

標準的實施不符合我們的protected override IList<Assembly> AndroidViewAssemblies執行工作逢。

解決方案:

刪除assemblies.Add (typeof(...).Assembly);protected override IList<Assembly> AndroidViewAssemblies { ... }解決我們的問題。

+0

謝謝尼爾斯。我與自定義主持人的情況完全相同,我也是這樣做的,它解決了這個問題,雖然我們不清楚爲什麼會這樣。 – rideintothesun

+0

同樣在這裏,我能想到的唯一情況是現在會自動添加程序集,因此消息「具有相同密鑰的項目已被添加。」 – Niels

相關問題