NSUserDefaults boolforKey的设计限制是什么?

19

NSUserDefaults的API文档中有一个名为boolForKey:的消息,其描述如下 -

boolForKey:
返回与指定键关联的布尔值。
- (BOOL)boolForKey:(NSString *)defaultName

返回值 如果默认名称中的布尔值与用户默认设置相关联,则返回该值。否则,返回NO。

考虑到[[NSUserDefaults standardUserDefaults] boolForKey:@"some_Key"]返回NO可能是因为该键不存在或者该键存在且具有一个布尔值NO。如何区分?目前,我只能避免首先陷入这种情况。


我之前搜索时完全没有找到这个iPhone开发中关于NSUserDefault检查布尔值存在性的问题。 :) - NP Compete
2个回答

33

您正在错误地使用用户默认设置。在应用程序启动时,您应该使用包含所有首选项默认值的字典调用-[NSUserDefaults registerDefaults:]

然后,如果用户没有设置偏好,-boolForKey将返回默认值。


4
我不会说他在使用用户默认设置时犯了错误。注册默认设置是可选的,在他的情况下可能更方便,但Mike Abdullah的回答更为恰当。 - Rafael Bugajewski

29

还需使用 -objectForKey: 方法。这将告诉您键是否存在。


1
BOOL不是对象,因此不能使用。 - NP Compete
20
是的,BOOL 不是对象,但 NSUserDefaults 将它们处理为 NSNumber 实例,并且你可以从 -objectForKey: 方法中获取到它。 - Mike Abdullah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接