Ios If语句有时会因id布尔值比较而失败?

Ios If语句有时会因id布尔值比较而失败?,ios,objective-c,nsstring,comparison,boolean,Ios,Objective C,Nsstring,Comparison,Boolean,我从JSON格式的web中提取数据,当我使用“ValueForKeyPath”解析数据时,它将字符串值存储为id对象 因此,我将数据存储到NSMutableArray 在调试器窗口中,它将所有添加的元素显示为(id)null 我有一个if语句 if ([[self.activeCategories objectAtIndex:selected] boolValue] == true) 有时,我会说20%的时间它在if语句中失败,而它本不应该失败。 我想知道这是否是因为self.activeCa

我从JSON格式的web中提取数据,当我使用“ValueForKeyPath”解析数据时,它将字符串值存储为id对象

因此,我将数据存储到
NSMutableArray
在调试器窗口中,它将所有添加的元素显示为(id)null

我有一个if语句

if ([[self.activeCategories objectAtIndex:selected] boolValue] == true)
有时,我会说20%的时间它在if语句中失败,而它本不应该失败。
我想知道这是否是因为
self.activeCategories
正在存储
id
类型。是否需要对数组中的所有对象执行
[NSString stringWithFormat@“%@”,x]
?当我使用(NSString*)直接强制转换它时,它在调试器中仍然是type
id

这对我来说是一个非常奇怪的错误。。。由于错误的再现性不一致。

请这样尝试:

if ([[self.activeCategories objectAtIndex:selected] boolValue])

根据这一点,BOOL可能包含0和1以外的值,这可能导致比较失败。

id
只是一种可以转换为另一种类型的泛型类型。您的问题是元素被添加为
null
对象。对于空对象,为什么希望
boolValue
YES
?也许您应该显示代码,说明如何将元素添加到
NSMutableArray
@iwasrobed 1和0假定存储为字符串。有趣的是,如果我使用
[NSString stringWithFormat@“%@”,data1]
而不是直接将
data1
添加到数组中,调试器将显示1和0,而不是null(id)…使用
valueForKeyPath
时,它不一定会将对象作为
NSString
返回,而是作为具有类型
id
的通用对象返回,该类型可以是任意数量的不同对象类型。主要的一点是,当您填充
NSMutableArray
时,由于它正在填充
null
对象,所以有些东西正在中断。如果您不发布代码和JSON输出示例,我们真的无能为力。