0

カスタム プレゼンターを定義して、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 関連の問題ではありません。

古いドキュメントに依存しているか、非常にばかげたことをしていると思います (後者だと思います)。

4

1 に答える 1

2

呼び出されないと私が考える唯一の理由はCreatePresenter、古い「プレゼンターベース」のコンストラクターを使用している場合です。Setup


MvxTouchSetup2 つの異なるコンストラクターを提供します。

    protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, UIWindow window)
    {
        _window = window;
        _applicationDelegate = applicationDelegate;
    }

    protected MvxTouchSetup(MvxApplicationDelegate applicationDelegate, IMvxTouchViewPresenter presenter)
    {
        _presenter = presenter;
        _applicationDelegate = applicationDelegate;
    }

https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Touch/Platform/MvxTouchSetup.cs#L39から

デフォルトでは、Nuget ベースのプロジェクトとほとんどの MvvmCross サンプルで、これらの最初のものが使用されます。

ただし、実際には 2 番目の形式が最初に存在していたため、歴史的な理由 (古いアプリが機能しなくなるのを防ぐため) からまだ存在しています。使用する場合、CreatePresenter()は使用されません。作成中にプレゼンターを提供したため、必要ありません。

于 2013-10-24T11:45:43.590 に答える