如何使用objectForKey在objective-c中编写有效的布尔条件
我试图理解为什么下面的语句总是会碰到ELSE子句。我搞不懂的是,不管实际值是多少(NSLog显示为0还是1),这总是会命中else。有什么原因吗 NSArray项是从JSON对象中提取的-仅供参考如何使用objectForKey在objective-c中编写有效的布尔条件,objective-c,conditional,boolean,Objective C,Conditional,Boolean,我试图理解为什么下面的语句总是会碰到ELSE子句。我搞不懂的是,不管实际值是多少(NSLog显示为0还是1),这总是会命中else。有什么原因吗 NSArray项是从JSON对象中提取的-仅供参考 BOOL* instock = [item objectForKey:@"itemInStock"]; obj.instock = instock; NSLog(@"and it was %@", obj.instock); if (obj.instock == YES) {
BOOL* instock = [item objectForKey:@"itemInStock"];
obj.instock = instock;
NSLog(@"and it was %@", obj.instock);
if (obj.instock == YES) {
//do yes stuff
}else {
//do no stuff
}
你的代码很奇怪。什么类型的
obj.instock
?你的第一行
BOOL* instock = [item objectForKey:@"itemInStock"];
毫无意义-objectForKey:
不返回BOOL*
值。它返回id
。我在这里猜测,您实际上得到了一个NSNumber*
,它正好工作正常,因为NSNumber*
适合BOOL*
(因为它们都是指针)。类似地,obj.instock
也可能是一个NSNumber*
对象(如果它不是某种类型的对象,您的NSLog()
会崩溃)
因此,假设obj.instock
是一个NSNumber*
,那么您想要的条件就是
if ([obj.instock boolValue]) {
// yes
} else {
// no
}
您还应该修复此代码,以避免在您没有的情况下尝试声称您有一个
BOOL*
。在您的NSLog
中,您使用的是%@
%@
指的是对象。与不是对象的BOOL*instock
相反
有很多方法可以解决这个问题。您的
[item objectForKey:@“itemInStock”]使用什么数据类型代码>返回?
例如,如果它返回NSNumber,则可以执行以下操作:
obj.instock = [[item objectForKey:@"itemInStock"] boolValue];
NSLog(@"and it was %d", obj.instock);
if (obj.instock == YES) {
//do yes stuff
}else {
//do no stuff
}
同样,还有其他方法可以做到这一点。假设他发布的代码没有崩溃,obj.instock
不是BOOL
,而是id
(可能是NSNumber*
)。在这种情况下,您发布的代码将不起作用。@凯文:首先,您如何知道他的对象。instock
不是BOOL
?我们都不知道obj.instock是什么数据类型,因为根本没有声明。其次,我的代码意味着obj.instock
被声明为BOOL
数据类型。如果obj.instock
是BOOL
,那么原始代码中的NSLog
就会崩溃。这就是为什么我用“假设他发布的代码没有崩溃”来限定我的声明。