objective-cのキー値コーディングでvalueにBOOLを使う方法

objective-cのキー値コーディングでBOOLをやり取りする方法がわからなくて少しはまったのでメモ。(iPhoneのuserDefaultの方法を使えると思い込んでた。。。)

そもそもsetValue forKeyでつかうvalueはid型。つまりオブジェクトじゃなきゃいけないけどBOOLはプリミティブ型なのでそのままじゃ出し入れできない。

そこでつまったんですが以下の方法でできました。わかってしまえば当たり前ですね。

//id paramsのプロパティhogeにBOOL(YES)を設定
[params setValue:[NSNumber numberWithBool:YES] forKey:@"hoge"];

//id paramsのプロパティhogeからBOOLを取得
NSNumber *i = (NSNumber *)[params valueForKey:@"hoge"];
BOOL b = [i boolValue];

BOOLはC言語のtrue,falseのエイリアスなので、0ならNO,0以外ならYESなのでNSNumberオブジェクトに変換してやり取りすればOKです。