NSArrayのindexOfObjectの戻り値とNSNotFoundについて

最近、Objective-cについて勉強し始めました。

参考にさせていただいてるのはコチラ!
Cocoaの素、Objective-Cを知ろう − @IT
分かりやすくて、とても勉強になります!ありがとうございます!!

今のところ、(4)まで進んだのですが、
サンプルプログラムを動かしてみるとWarningが出てくる。
バージョンも変わってるだろうし、仕方がない。

具体的には、リンク先の下記の部分。
配列とループ処理を理解しよう (2/4):Cocoaの素、Objective-Cを知ろう(5) - @IT

//(4)ある要素のインデックスを取得
int objectIndex = [array indexOfObject:@"pqr"];
if (objectIndex == NSNotFound) {
NSLog(@"'pqr' is not found.\n");
}

出力されるWarningはこんな感じ。

$ gcc -o main main.m -framework Foundation
main.m: In function ‘main’:
main.m:20: warning: comparison is always false due to limited range of data type

調べてみたら「比較が常にfalseになってるよ」的なことだということで、
実行ファイルを実行してみると、案の定「NSLog(@"'pqr' is not found.\n");」が出てない。

ググると似たような人発見!
NSNotFoundにはまった。 - メソッド屋の日記

なるほどー!
難しいことはさておきw、
NSNotFoundの値が変わっちゃってるっていうことね。

で、どうすりゃいいんだ、っていうことでさらに調べたところ、
リファレンスによると、indexOfObjectの戻り値はNSUIntegerなので、以下のように修正。

//  int objectIndex = [array indexOfObject:@"pqr"];
NSUInteger objectIndex = [array indexOfObject:@"pqr"];

無事、Warningも出なくなり、
「'pqr' is not found.」も出力されるようになりましたとさ。

めでたしめでたし。