コレクションリテラルの記述方法に注意

#define COL_A @"columnA"
#define COL_B @"columnB"
#define COL_C @"columnC"
#define COL_D @"columnD"

NSArray* colums = @[COL_A,
                   COL_B,
                   COL_C
                   COL_D
                   ];

このようにNSArrayを定数で初期化した結果のダンプは

$0 = 0x0b49f510 <__NSArrayI 0xb49f510>(
columnA,
columnB,
columnC,
columnD
)

ではなく、

$0 = 0x0b49f510 <__NSArrayI 0xb49f510>(
columnA,
columnB,
columnCcolumnD
)

である。

なんてことないCOL_CとCOL_Dに区切り文字がないだけなのだが、Objective-Cのヒアドキュメント(風)の文字列がエラーを隠してしまい、序数2の配列に格納されるため、実行時バグとして表出する。

コンパイルエラーって大事だよねぇ。