【发布时间】:2013-04-28 10:23:09
【问题描述】:
我从 Web 中提取格式为 JSON 的数据,当我使用“ValueForKeyPath”解析数据时,它会将字符串值存储为 id 对象。
所以我将数据存储到NSMutableArray
在调试器窗口中,它显示所有添加为 (id) null 的元素。
我有一个 if 语句
if ([[self.activeCategories objectAtIndex:selected] boolValue] == true)
有时我会说 20% 的情况下它不应该通过 if 语句。
我想知道是否是因为 self.activeCategories 正在存储 id 类型。我需要对数组内的所有对象执行[NSString stringWithFormat@"%@", x] 吗?似乎当我直接使用 (NSString *) 直接转换它时,它仍然在调试器中输入id。
对我来说这是一个非常奇怪的错误...因为该错误无法始终重现。
【问题讨论】:
-
id只是一个可以转换为另一种类型的泛型类型。您的问题是元素被添加为null对象。为什么您希望boolValue对于空对象是YES?也许您应该显示如何将元素添加到NSMutableArray的代码 -
@iWasRobbed 1 和 0 应该存储为字符串。有趣的是,如果我使用
[NSString stringWithFormat @"%@", data1]而不是直接将data1添加到数组中,调试器将显示 1 和 0 而不是 null (ids)... -
当您使用
valueForKeyPath时,它不一定将对象作为NSString返回,而是作为类型为id的通用对象返回,它可以是任意数量的不同对象类型。要点是,当您填充NSMutableArray时,由于使用null对象填充它,因此出现了问题。如果没有您发布代码和 JSON 输出示例,我们真的无能为力。
标签: ios objective-c nsstring comparison boolean