2010-12-31 13 views
0

私はUITableViewControllerについてちょっと混乱しています...私が関心を持つ限り、それらは一般的にはUITableViewのデリゲートとデータソースです(違いはありますが)。UITableViewControllerデリゲートとデータソースを設定する

しかし、Interface BuilderのUITabBarViewControllerにUITableViewControllerを埋め込む場合のように、私たちはIBでテーブルビューコントローラを開始します。したがって、私の理解では、デフォルトイニシャライザが呼び出されています。

しかし、この場合には、私は、コードのこの部分があります

@interface Settings : UITableViewController { 

} 

そして、私はのUITableViewのデリゲートとデータソースは、このクラスにフックアップされていることが分かりIBでを。

@interface Settings : UITableViewController <UITableViewDelegate, UITableViewDataSource>  
{ 
} 

と.mファイルに:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [tableView setDelegate:self]; 
    [tableView setDataSource:self]; 
} 

私は確かにいくつかのケースどこにつまずいている私の質問は、なぜそれが我々が明示的にそれが以下であることを言う必要はないということである、です私は何らかの作業をするために上記のコードを明示的にコード化する必要があります。それは私にとって謎はまだですが、それが必要な理由のよう...

答えて

3

、あなたのクラスが実装しようとしているプロトコルを定義することができます。プロトコルには(Javaのインタフェースのような)メソッド宣言が含まれますが、実装はありません。いくつかのメソッドは必須とマークされ、いくつかはオプションです。私。プロトコルを実装する場合は、少なくとも必要なプロトコルを実装する必要があります。

ただし、プロトコルを実装することを示す必要はありません。必要なものを実装すれば十分で、デリゲートは正常に動作します。しかしそれを示すことは良い考えです。 Xcodeとコンパイラはどちらも、実装でエラーを検出した場合(必要なメソッドを忘れているか、間違ったメソッドのシグネチャを使用しているかなど)、警告を出します。

+0

ありがとう、それは私が必要なものです。デリゲートとデータソースを自分自身に設定するのはどうですか?それは実際に必要ですか? –

+0

これは、デリゲートメソッドが呼び出されるオブジェクトを定義するため、必要です。これをtableViewとして想像すると、デリゲートとdataSourceに表示される行やセクションの数、セルの見た目などを「質問」します。そのため、どのオブジェクトがデリゲート(つまり、誰に依頼するのか)をtableViewに伝える必要があります。 –

+0

Björnありがとうございますが、UITableViewControllerサブクラスである新しいファイルを作成すると、デリゲートとデータソースの両方がIBのファイル自体に接続されます。これは、この場合、手動でこれを手動で行う必要はないということですか? –

-5

使用

tableView.delegate =自己; tableView.dataSource = self;代わりに、スーパークラスの後ろに角括弧で

[tableView setDelegate:self]; 
[tableView setDataSource:self]; 
+6

いいえ。これらの実装は同等です。 –

関連する問題