1

私はいくつかの異なるアプローチからこれを試しましたが、これは期待どおりに機能していません。これはハイブリッドiOSアプリケーションであり、画面の約半分がUIViewControllersとプライマリUIWebViewを備えています。UIWebViewイベントの処理、特にエラー処理に関しては、同様のロジックがたくさんあります。サブクラスは、表示されている画面を処理するために少し専門化されています。したがって、クラス図は大まかに次のようになります。

UIViewController
  +- BaseWebController   <-- this class should bind to UIWebView
      +-- ScreenAController
      +-- ScreenBController
      +-- ...

BaseWebController.designer.csが本当に基本的なところ。実際、配線すると次のようになります。

[Register ("BaseWebController")]
partial class BaseWebController
{
    [Outlet]
    MonoTouch.UIKit.UIWebView WebView { get; set; }

    void ReleaseDesignerOutlets ()
    {
        if (WebView != null) {
            WebView.Dispose ();
            WebView = null;
        }
    }
}

問題は次のとおりです。UIWebViewがWebViewインスタンスに適切にバインドされていないため、さまざまな例外が発生します。'セレクターsetWebViewの検索に失敗しました:ScreenAController'などのさまざまなメッセージが表示されますが、親クラス(ScreenAController)をバインドしようとして失敗したことになります。

質問:このバインディングがどのように機能するのか、何かが足りませんか?基本的に、私はこれを非常にDRYに保ち、重複するすべてのコードを基本クラスにプッシュしようとしています。そうしないと、同じ100行のワイヤーアップコードと各画面のエラーチェックを繰り返すことになります。

TIA。

4

3 に答える 3

1

私はあなたが継承と結合について正しいと思いますが、完全にはゲル化していません。

次を追加して妥協できますか?

[outlet]
new UIWebView WebView
{
    get { return base.WebView; }
    set { base.WebView = value;}
}

ScreenControllerクラスのそれぞれに。

完全に乾くわけではありませんが、すべてのクラスにすべてを複製するよりはましです。

于 2012-05-25T21:58:17.763 に答える
1

このバグのように見えます: https://bugzilla.xamarin.com/show_bug.cgi?id=1449#c7

于 2012-05-25T22:56:00.093 に答える
0

@スチュアート:

右。私はあなたが言及したものと非常によく似た場所に行き着きました。各親クラス (ScreenAController、ScreenBController) を同じビューにバインドし、ベースで定義された抽象プロパティを実装することにしました。

   protected abstract UIWebView ActiveWebView { get; }

そして、その基本クラスはコンストラクターで xib ファイルを設定します。ScreenAController、ScreenBController、...、実際にはそのアウトレットへの単なる参照であるプロパティを実装します。私が得ることができるのと同じくらい乾燥しています。これはあなたが言っていることのほとんどです。

    /// <summary>
    /// Provides access to the base class to handle most error handling.
    /// </summary>
    protected override UIWebView ActiveWebView { get { return this.WebView; } }

@mhutch、そのバグを詳しく見ていきます。今のところ、これを回避できます。

ありがとう!

于 2012-05-28T01:06:57.173 に答える