プログラムを組んでいると、「methods named 'xxx' found」という警告がいくつか出た。
直訳すると「xxxという名前のメソッドが複数見つかった」となろうが、
それならエラーになるはずではないか。
よくよく調べると、id型のクラスインスタンスに対してメソッドを発行しようとすると
発生する(ことがある)とわかった。
「例」
タッチイベントを処理する
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSTimeInterval tm=[[touches anyObject]timestamp]; // ここでmethods named 'timestamp' foundが発生する
}
touchesに実際に格納されるのはUITouchであるが、[touches anyobject]はid型で返す。
timestampという名前のメソッドは複数のクラスが持つので、
どれか解決できずに警告が出てしまう。
実行時にはNSSetの内容は決定しているので、[touches anyobject]のidが実際は何であるか、
この場合UITouchであることがわかっているのでtimestampを呼び出す先もわかる=実行時エラーはでないのである。
警告を回避するには
NSTimeInterval tm=[(UITouch *)[touches anyObject]timestamp];
として型を確定してやればよい。ポインター型でキャストすることに注意。
Xcodeのエラーコードはわかりにくい(その上ドキュメントがない)ので困る。
0 件のコメント:
コメントを投稿