2

私はXcodeに比較的慣れていません。

可能な限り Xcode の Interface Builder でこれを実行しようとしています。私はレガシ コードを使用しているため、ストーリーボードはオプションではありません。

DualTVController と呼ぶ XIB を使用しています。シンプルな UIViewContoller に基づいています。

この XIB には、LeftTV と RightTV の 2 つの UITableView があります。IB では、LeftTV のデリゲート/データソースを XIB のクラス表現であるファイルの所有者に割り当てることができます。これはうまくいきます。

IB で RightTV のデリゲート/データソースを割り当てたいです。これまでのところ、私はこれに LeftTV をうまく使用できましたが、それは混乱を招くだけです。

代わりに、RightDelegate という UITableViewController サブクラスを作成し、IB を通じて作成する単純なオブジェクトのクラスとして割り当てました。UITableViewDataSource および UITableViewDelegate プロトコルに従うようにしました。これにより、RightTV のデリゲート/データソースを IB に接続できますが、実行しようとすると BAD_ACCESS エラーが発生します。

RightDelegate には、LeftTV と同じデリゲート コードがあります (動作します)。誰でも問題を提案できますか? コードで RightDelegate をインスタンス化する責任はありますか?

助けてくれてありがとう。

4

1 に答える 1

1

注: IB でこれを実行したいことはわかっていますが、この場合はおそらくコードで処理するのが最適です。IB で単一のテーブルビューのデリゲートを設定するのは簡単ですが、見過ごされがちです。デリゲートは非常に重要であるため、通常はコードに保持してミスを減らします。

複数のテーブルビューを使用する場合、デリゲートを管理する方法がいくつかあります。

a)ビューコントローラーで両方のデリゲートを管理し、各デリゲートコールバックのロジックを使用して、どのテーブルビューが要求しているかを判断します(面倒です) b)一方をVCに残し、もう一方を独自の別のコントローラーに配置してデリゲートを分割します(やや混乱します)

c)テーブルビューごとに個別のテーブルビューコントローラーインスタンスを使用してデリゲートを分割します。これはおそらく最良の選択ですが、3 つのコントローラー (xib ファイルを初期化する最初のビュー コントローラー) と、2 つの個別のテーブルビュー コントローラー (leftTable、rightTable) が必要です。

メインのView Controllerで、各テーブルビューのプロパティを設定してください。次に、View Controllerを含めてから、TableView Controllerを初期化し、デリゲートを設定します

//Example
self.rtv = [[rightTableViewController alloc] init];  //create a strong property for this
self.rtv.delegate = self;  //let it talk back to you if needed

self.ltv = [[leftTableViewController alloc] init];
self.ltv.delegate = self; 

self.rightTableView.delegate = rtv;
self.rightTableView.datasource = rtv;

self.leftTableView.delegate = ltv;
self.leftTableView.datasource = ltv;

次に、各テーブルビュー コントローラーにコードを追加して、テーブルビューを管理します。メイン ビュー コントローラを呼び出すためにテーブルビュー コントローラが必要な場合は、デリゲート コールバックを使用します。

これがお役に立てば幸いです。

于 2012-11-24T05:22:46.233 に答える