如何使用 objectForKey 在 Objective-C 中编写有效的布尔条件
我试图理解为什么以下内容总是命中 ELSE 子句。我无法弄清楚的是,无论实际值如何( NSLog 显示 0 或 1),它总是会命中 else 。有什么理由吗?
NSArray 项是从 JSON 对象中提取的 -fyi
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
}
I'm seeking to understand why the following always hits the ELSE clause. What I can't figure out is that regardless of the actual value ( NSLog shows a 0 or 1) this always hits the else. Any reason why?
The item NSArray is pulled from a JSON object -fyi
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
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你这里的代码很奇怪。
obj.instock
的类型是什么?你的第一行根本没有意义。
-objectForKey:
不返回BOOL*
值。它返回id
。我猜你实际上得到了一个NSNumber *
返回,并且它恰好工作正常,因为NSNumber *
适合BOOL * 内部
(因为它们都是指针)。同样,obj.instock
也可能是一个NSNumber*
(如果它不是某种类型的对象,则您的NSLog()
> 会崩溃)。因此,假设 obj.instock 是一个 NSNumber* ,您想要的条件很简单
您还应该修复此代码,不要尝试声称您有一个 BOOL * 当你不这样做时。
Your code here is rather strange. What is the type of
obj.instock
? Your very first linemakes no sense at all.
-objectForKey:
doesn't returnBOOL*
values. It returnsid
. I'm guessing here that you're actually getting anNSNumber *
back, and it just happens to work alright because anNSNumber *
fits inside of aBOOL *
(as they are both pointers). Similarly,obj.instock
is likely to be anNSNumber*
as well (if it wasn't an object of some sort, yourNSLog()
would crash).So, assuming that
obj.instock
is anNSNumber*
, the conditional you want is simplyYou should also fix this code to not try and claim you have a
BOOL*
when you don't.在您的
NSLog
中,您使用的是%@
。%@
指的是对象。与您的BOOL* instock
相反,它不是一个对象。有一些方法可以解决这个问题。
您的
[item objectForKey:@"itemInStock"];
返回什么数据类型?例如,如果它返回一个 NSNumber,那么您可以这样做:
同样,还有其他方法可以做到这一点。
In your
NSLog
, you are using%@
.%@
refers to objects. Contrary to yourBOOL* instock
which is not an object.There are ways to fix that.
What data type does your
[item objectForKey:@"itemInStock"];
return?If it returns an NSNumber for example, then you can do:
Again, there are other ways to do that.