首先,我将BOOL值转换为NSNumber,以便将其置于NSUserDefaults中。后来我想从NSUserDefaults中检索BOOL值,但显然我得到NSNumber而不是BOOL。我的问题是?
目前我有:
if (someNSNumberValue == [NSNumber numberWithBool:NO]) {
do something
}
更好的比较方法?
谢谢!
答案 0 :(得分:136)
您目前比较两个指针。使用NSNumber
方法来实际比较两者:
if([someNSNumberValue isEqualToNumber:[NSNumber numberWithBool:NO]]) {
// ...
}
要从NSNumber
使用-(BOOL)boolValue
获取bool值:
BOOL b = [num boolValue];
通过这种方式比较会更容易为我阅读:
if([num boolValue] == NO) {
// ...
}
答案 1 :(得分:1)
NSUserDefaults
有两种透明操作布尔值的方法:
- (BOOL)boolForKey:(NSString *)defaultName
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName
答案 2 :(得分:0)
我设法从其NSNumber
(doh!)中设法NSConcreteValue
的“booleanity”的唯一方法是使用以下内容...
id x = [self valueForKey:@"aBoolMaybe"];
if ([x respondsToSelector:@selector(boolValue)] &&
[x isKindOfClass:objc_getClass("__NSCFNumber")])
[self doSomethingThatExpectsABool:[x boolValue]];
其他所有技巧...... 失败。买家要小心,这不是万无一失的(__NSCFNumber
可能是平台/机器特定的 - 它只是Apple的实施细节)......但正如他们所说的那样.. 没有别的成功了!的
答案 3 :(得分:0)