简体   繁体   English

MvvmCross Xamarin IOS“找不到ViewModel的视图”

[英]MvvmCross Xamarin IOS “Could not find view for ViewModel”

I use Storyboard with MvvmCross and Xamarin iOS. 我将Storyboard与MvvmCross和Xamarin iOS一起使用。 A I'm getting exception. 我要例外了。 Here is stack trace: 这是堆栈跟踪:

{System.Collections.Generic.KeyNotFoundException: Could not find view for Kosht.Core.ViewModels.TutorialViewModel at MvvmCross.Views.MvxViewsContainer.GetViewType (System.Type viewModelType) [0x00081] in :0 at MvvmCross.Presenters.MvxAttributeViewPresenter.GetPresentationAttribute (MvvmCross.ViewModels.MvxViewModelRequest request) [0x0000c] in :0 at MvvmCross.Presenters.MvxAttributeViewPresenter.Show (MvvmCross.ViewModels.MvxViewModelRequest request) [0x00000] in :0 at MvvmCross.Platforms.Ios.Views.MvxIosViewDispatcher+<>c__DisplayClass2_0.b__0 () [0x0001d] in :0 at MvvmCross.Base.MvxMainThreadAsyncDispatcher+<>c__DisplayClass0_0.b__0 () [0x00000] in :0 at MvvmCross.Base.MvxMainThreadAsyncDispatcher+<>c__DisplayClass1_0+<b__0>d.MoveNext () [0x00011] in :0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.b__6_0 (System.Object state) [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11 {System.Collections.Generic.KeyNotFoundException:无法在MvvmCross.Presenters.MvxAttributeViewPresenter(0)处的MvvmCross.Views.MvxViewsContainer.GetViewType(System.Type viewModelType)[0x00081] [0x00081]中找到Kosht​​.Core.ViewModels.TutorialViewModel的视图。 MvvmCross.Presenters.MvxAttributeViewPresenter.Show(0中的MvvmCross.ViewModels.MvxViewModelRequest请求)[0x0000c](0)中的MvvmCross.Platforms.Ios.Views [Ix.Views.Views.Views.Ios.Views.Views.Views.Ios。 ()在MvvmCross.Base.MvxMainThreadAsyncDispatcher +上为0的[0x0001d] + <> c__DisplayClass0_0.b__0()在MvvmCross.Base.MvxMainThreadAsyncDispatcher + <> c__DisplayClass1_0上为0的[0x00000]在0时为[0x00000] [dxMoveNext() ---从之前引发异常的位置开始的堆栈跟踪---位于System.Runtime.CompilerServices.AsyncMethodBuilderCore + <> c.b__6_0(System.Object状态)在/Library/Frameworks/Xamarin.iOS.framework中[0x00000] /版本/ 11 .14.0.14/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1018 at Foundation.NSAsyncSynchronizationContextDispatcher.Apply () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/Foundation/NSAction.cs:178 --- End of stack trace from previous location where exception was thrown --- at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr) at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/UIKit/UIApplication.cs:79 at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0002c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/UIKit/UIApplication.cs:63 at Kosht.iOS.Application.Main (System.String[] args) [0x00001] in /Users/v .14.0.14 / src / Xamarin.iOS / mcs / class / referencesource / mscorlib / system / runtime / compilerservices / AsyncMethodBuilder.cs:1018 at Foundation.NSAsyncSynchronizationContextDispatcher.Apply()在/Library/Frameworks/Xamarin.iOS中.framework / Versions / 11.14.0.14 / src / Xamarin.iOS / Foundation / NSAction.cs:178 ---从上一个引发异常的位置开始的堆栈结束跟踪---(包装器托管到本机)UIKit。 UIKit.UIApplication.Main上的UIApplication.UIApplicationMain(int,string [],intptr,intptr)(/Library/Frameworks/Xamarin.iOS中的System.String [] args,System.IntPtr主体,System.IntPtr委托)[0x00005] .framework / Versions / 11.14.0.14 / src / Xamarin.iOS / UIKit / UIApplication.cs:79,位于UIKit.UIApplication.Main(System.String [] args,System.String主体类名,System.String委托类名)[0x0002c]中/Library/Frameworks/Xamarin.iOS.framework/Versions/11.14.0.14/src/Xamarin.iOS/UIKit/UIApplication.cs:63 at Kosht​​.iOS.Application.Main(System.String [] args)[0x00001] in /用户/ v adimkhadyka/Projects/Kosht/src/Mobile/Kosht.iOS/Main.cs:13 } adimkhadyka / Projects / Kosht​​ / src / Mobile / Kosht​​.iOS / Main.cs:13}

My TutorialView: 我的TutorialView:

[MvxViewFor(typeof(TutorialViewModel))]
    [MvxFromStoryboard("Tutorial")]
    [MvxRootPresentation]
    public partial class TutorialView : BaseViewController<TutorialViewModel>
    {
        public TutorialView() : base("TutorialView", null)
        {
        }

        public override void ViewDidLoad()
        {
            base.NavigationController.NavigationBarHidden = true;
            base.ViewDidLoad();
        }
    }

My BaseViewController: 我的BaseViewController:

    public class BaseViewController<TViewModel> : MvxViewController,  IBaseView<TViewModel> where TViewModel : BaseViewModel
        {
            protected BaseViewController(string nibName, NSBundle bundle) : base(nibName, bundle)
            {
            }

            public BaseViewController(IntPtr handle) : base(handle)
            {
            }

            public BaseViewController()
            {
            }

            public override void ViewDidLoad()
            {
                base.ViewDidLoad();
                // Perform any additional setup after loading the view, typically from a nib.
            }

            public new TViewModel ViewModel => (TViewModel)base.ViewModel;


            public override void DidReceiveMemoryWarning()
            {
                base.DidReceiveMemoryWarning();
                // Release any cached data, images, etc that aren't in use.
            }
}

If I remove BaseViewController and inherited my TutorialView from MvxViewController , everything works great, but with my base class I'm getting the exception. 如果我删除BaseViewController并从MvxViewController继承了TutorialViewMvxViewController一切都会很好,但是对于我的基类,我会遇到异常。

Change this line 更改此行

public class BaseViewController<TViewModel> : MvxViewController,  IBaseView<TViewModel> where TViewModel : BaseViewModel

To

public class BaseViewController<TViewModel> : MvxViewController<TViewModel> where TViewModel : class, IMvxViewModel

And remove this 并删除这个

public new TViewModel ViewModel => (TViewModel)base.ViewModel;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM