2011-10-24 4 views
2

私のコードのいくつかを見直していたところ、UITableViewで、datasourcedelegateUITableViewであるUIViewControllerは、プロトコル<UITableViewDataSource, UITableViewDelegate>を宣言していませんが、単にメソッドを持ちますがプロトコルを宣言しません。UITableViewのデータソースとデリゲートとしてのUIViewControllerは、プロトコルに準拠していませんか?

dataSource 
The object that acts as the data source of the receiving table view. 
@property(nonatomic, assign) id<UITableViewDataSource> dataSource 
Discussion 
The data source must adopt the UITableViewDataSource protocol. The data source is not retained. 
delegate 
The object that acts as the delegate of the receiving table view. 
@property(nonatomic, assign) id<UITableViewDelegate> delegate 
Discussion 
The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained. 

あらゆるタイプの警告がない、私はこの仕事をするためにはもちろん、必要なメソッドを持っていますし、これは、なぜすべてが、完璧に動作します:これも?、ドキュメントごとに取り組んでいる方法

ワーキング?。私はこのプロトコルを宣言しているUITableViewControllerから継承していません。これはちょうどUIViewControllerサブクラスです。

EDIT:どうやらIBはあなたにそれがそこに設定されている場合しかし、コードで期待どおりに、それがない任意の警告を与えることはありません。私はIBもあなたに警告を与えるべきだと信じていますが、私はそう思わないと思います。何が起こっている

答えて

2

のだまされやすい人は、(UITableViewDataSourceためUITableViewDelegate用なしと2のように限り、あなたはUITableViewDelegateとUITableViewDataSourceの要求に応じてマークされたメソッドを実装しています)あなたは大丈夫です。 tableViewは、オプションのメソッドについてはrespondsToSelectorでチェックします。インターフェイスビルダーで接続していますか?あなたはコードでそれを行う場合は、あなたのクラスはUITableViewDataSourceとUITableViewDelegateに準拠していないと言って、ほとんどの警告があるはずですが、あなたのオブジェクトは、実行時に必要なメッセージに応答する場合、一日の終わりに、それが動作します。

+0

それは期待通りのコードからしようとしたときに警告を与えていますが、IBから実行どれも、私はそれはまた、IBに警告を表示するべきだと思いませんが、私はないと思います。 –

+0

@OscarGomez同意すると、IBに警告が表示されるはずです。 – jbat100

1

は、テーブルビューは、指定されたオブジェクトが(非宣言)プロトコルに準拠していることを期待して、指定されたオブジェクトへのデータソースとデリゲートメッセージを送信していることです。

UITableViewDataSourceを追加する& UITableViewDelegateをインターフェイスの.hファイルに追加すると、タイプチェックと適合(「必須」メソッドなどを実装していない場合の警告)が得られます。

私が上に要約した内容の公式な説明があります。

ところで、あなたの質問は、この1

UITableView without <UITableViewDelegate, UITableViewDataSource> still works!

+0

しかし鉱山は非常に奇妙である、すべての警告を与えるものではありません、情報とリンクいただきありがとうございます。 –

関連する問題