【问题标题】:If Statement Failing sometimes with id BoolValue Comparison?如果语句有时与 id BoolValue 比较失败?
【发布时间】: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


【解决方案1】:

这样试试:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    相关资源
    最近更新 更多