NSArrayを宣言したときに「Missing sentinel in method dispatch」が表示された。

iPhoneアプリをポチポチと作るためにObjective-Cを書いてた時、ふっと配列を使いたくなってNSArrayを使って配列を宣言してみたました。

因みに書いてたのはこんなコード

NSArray *ar = [NSArray arrayWithObjects:@"test",@"test2"];

その時「Missing sentinel in method dispatch」という警告が表示されていて気持ちが悪かったのでちょっと調べてみた。

直訳するとメソッドの中に番兵が見つからないよってことかな?

なんかsentinel って聞き覚えがあるなぁ〜と思ったら番兵法でした

で、Objective-C 最速基礎文法マスター - fn7の日記を参考にNSArrayの宣言の仕方をもう一度見なおしてみたところ

上のコードをよーく見てみると最後のnilが抜けてた。

だから、番兵(この場合はnil)が見つからないって話だったのね。

だから上のコードは正しくは

 NSArray *ar = [NSArray arrayWithObjects:@"test",@"test2",nil];

となるみたい

JavaとかRubyから写った口だから最後にnilとかnullを手動で入れる文化が無かったために起こった悲劇でした。