Xamarin.ios MVVMCross:CreatePresenter()从未在MvvmCrossTouch设置中调用
我想定义一个定制的演示者来定制我的UI,在iPad上实现一个分割视图等等。我定义了这个类:Xamarin.ios MVVMCross:CreatePresenter()从未在MvvmCrossTouch设置中调用,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我想定义一个定制的演示者来定制我的UI,在iPad上实现一个分割视图等等。我定义了这个类: class ProjectPresenter : MvxTouchViewPresenter { public ProjectPresenter(UIApplicationDelegate applicationDelegate, UIWindow window) : base(applicationDelegate, window) { } public overrid
class ProjectPresenter : MvxTouchViewPresenter
{
public ProjectPresenter(UIApplicationDelegate applicationDelegate, UIWindow window) : base(applicationDelegate, window)
{
}
public override void Show(MvxViewModelRequest request)
{
IMvxTouchView viewController = this.CreateViewControllerFor(request);
this.Show(viewController);
}
}
我在MvxTouchSetup类中注册了它,如下所示:
protected override IMvxTouchViewPresenter CreatePresenter()
{
MvxTrace.Trace("Creating the presenter!");
return new ProjectPresenter(this.ApplicationDelegate, this.Window);
}
但是,Show()方法中的断点永远不会被命中。我尝试向Show()、ChangePresentation()等的所有重载添加断点,但它们从未被命中。现在,我知道Xamarin.iOS对于断点来说是相当不可靠的,但即使加入跟踪方法也不会带来任何乐趣。我甚至用一个抛出异常的方法替换了CreatePresenter()方法,应用程序没有崩溃
我的应用程序的其他修改会在我部署它们时显示出来,因此这不是某种缓存问题,尽管我已经清理了PC和Mac上的源代码。此外,我的setup类的构造函数中的断点被击中,因此这可能根本不是与Xamarin相关的问题
我猜我要么依赖旧的文档,要么做了一些非常愚蠢的事情(我猜是后者)。我认为不会调用
CreatePresenter
的唯一原因是,如果您在设置中使用的是旧的“基于presenter的”构造函数
MvxTouchSetup
提供了两种不同的构造函数:
protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, UIWindow window)
{
_window = window;
_applicationDelegate = applicationDelegate;
}
protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, IMvxTouchViewPresenter presenter)
{
_presenter = presenter;
_applicationDelegate = applicationDelegate;
}
从
默认情况下,在基于Nuget的项目和大多数MvvmCross示例中,使用第一个示例
然而,第二种形式实际上存在于第一种形式,因此出于历史原因,它仍然存在——以防止旧的应用程序崩溃。如果您使用它,则不会使用CreatePresenter()
,因为您在构建过程中提供了一个presenter,所以不需要它。现在,当我阅读AppDelegate的内容时,这一切似乎都很明显。谢谢你,斯图尔特!将[过时的]
标记添加到较旧的构造函数可能是个好主意吗?