我想定义一个自定义演示器来自定义我的UI,在iPad上实现拆分视图等等。我定义了这个类:
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上的源代码。此外,我的安装程序类的构造函数中的断点被击中,所以这甚至可能根本不是与Xamarin相关的问题。
我猜我要么依赖旧文档,要么我做的事非常愚蠢(我猜的是后者)。
答案 0 :(得分:2)
我认为CreatePresenter
不会被调用的唯一原因是,如果您使用较早的“基于演示者的”构造函数来构建Setup
MvxTouchSetup
提供了两种不同的构造函数:
protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, UIWindow window)
{
_window = window;
_applicationDelegate = applicationDelegate;
}
protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, IMvxTouchViewPresenter presenter)
{
_presenter = presenter;
_applicationDelegate = applicationDelegate;
}
默认情况下,在基于Nuget的项目和大多数MvvmCross示例中,使用了第一个。
然而,第二种形式实际上是存在的,所以它仍然存在历史原因 - 防止旧的应用程序破坏。如果您使用它,则不使用CreatePresenter()
- 因为您在施工期间提供了演示者,所以不需要它。