NSUserDefaults Class Reference
にあるとおり、NSUserDefaultsのboolForKeyは返り値がBOOLで、値が格納されていない場合もNOを返してくるので、NOが格納されていたのか、存在しなかったのでNOが返ってきたのかを判別できない。
値が格納されていたのかを知る方法がないかをstackOverflowで調べたところ、そもそも考え方が間違っていることが判明。
iphone – NSUserDefaults boolforKey limitation by design? – Stack Overflow
registerDefaults:(NSDictionary*) でデフォルト値を入れておいて、もし存在しなければデフォルト値を返してもらうようにすべきとのこと。
そういえば前も調べたことがある気がする。ということでブログにメモをしておく。
しかし一応、objectForKey: を使えば値が格納されていたのかを知ることもできるとのことだった。
(その場合、NSNumber として値を返そうとするため、存在しない場合は nil が返ってくる)