2011-03-22 24 views
0

私はXcode 4を使用しています、単純なクラスインターフェイスを定義して、インターフェイス定義にNSTableViewDelegateとNSTableViewDataSourceプロトコルを追加しました。すなわち、 @interface fooの:NSObjectの< NSTableViewDelegate、NSTableViewDataSource>私のビルド設定でプロトコルメソッドが指定されていないと警告が表示されないのはなぜですか?

、私はオプションは、「不完全のObjective-Cプロトコル」警告が有効になっていることが確認されている(などのデバッグ/どれアーキテクチャー用)と私が取得する必要がありますNSTableViewDataSourceプロトコルに必要な非オプションのメソッドのコンパイル時の警告。しかし、私はまったく警告を受けませんが、実行時に、メソッドが定義されていないというメッセージがログに表示されます。

誰もがなぜ知っていますか?あなたがAppleのNSTableView.hを見れば

+0

少なくともデリゲートプロトコルは非公式なので、メソッドを実装していないと、コードが機能するはずです。実装する必要がないということです。そのため警告が表示されません。 –

+0

メソッドのいくつかが必要です---そのため、実行時だけでなくコンパイル時に警告を出すべきです。 コンパイル時の警告が表示される場合は、ランタイム警告を受け取るだけのファンではありません。ですから、これはxcode4のバグかどうか、あるいはコンパイル時に生成される警告を止める何かがあります。 – David

+0

あなたは簡単に見つけることができます:XCode3でこれを試してください。 –

答えて

3

、あなたはそれ自体、このよ:

@protocol NSTableViewDataSource <NSObject> 
@optional 

/* Required Methods 
*/ 
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView; 
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)ta bleColumn row:(NSInteger)row; 
... 

だから、コメントおよびドキュメンテーションは、方法が必要であると主張するが、コードは、彼らはありませんよと言います。コンパイラは最終的にすべてのコメントとドキュメントを喜んで無視します。 ;)したがって、あなたはコンパイラの警告を受けていません。

私はこの2つの方法を必要とする意図があったと思いますが、多くの独自のコードが非公式のプロトコルであることに依拠しています。だから、すべてのレガシーコードを変更するという頭痛の代わりに、私は彼らがまだそれらを必要としないことに決めたと思う。私はライオンでこれが変わると思う。

関連する問題