即使数组不为空,在Xcode 4调试器中数组显示为空。

4

我之前一直在解决调试代码时遇到的问题,所以我写了这个小片段来测试它:

NSMutableArray *output = [NSMutableArray array];
while (true) {
    NSMutableArray *input = [NSMutableArray array];
    for (int i = 0; i < 30; i++) {
        [input addObject:[NSNumber numberWithInt:i]];
    }
    [output addObject:[NSArray arrayWithArray:input]];
    NSLog(@"%@, %@", input, output);
}

我在NSLog所在的那一行设置了断点,发现了一些有趣的事情。进入变量视图后,我打开了input并正确地将其显示为填充有NSNumber对象。然后我打开了output,正确地显示为包含一个数组。但是,在展开此数组时,它显示为空。
然而,NSLog却显示了不同的结果。它正确地将多维输出数组显示为包含填充有NSNumbers的数组。多维数组在调试器中的变量预览中不起作用吗?以下是问题的图像: enter image description here 我对此感到非常困惑。还有其他人遇到这个问题吗?

我可以扩展每个子数组,但它被视为通用对象而不是数组(仅显示isa指针)... - jtbandes
1
@jtbandes 是的,有时候我也会遇到这种情况。不过我不知道为什么会这样。这并不太合理,因为类型明确显示为 __NSArrayI *。是时候提交错误报告了! - Alexis King
是的,我认为这就是你问题的答案 :) - jtbandes
@Jake King:请将Radar复制到http://www.openradar.me上。 - Jeremy W. Sherman
1个回答

3
我已经向苹果公司报告了这个问题,涉及多个版本的Xcode和Project Builder。它一直被报告为重复问题,因此显然是一个已知的bug,但优先级较低或者非常难以修复。
其他容器类(例如NSDictionary和NSSet)也存在同样的问题,因此这不是特定于NSArray的问题。
我建议您也在http://bugreport.apple.com上报告此问题,以加大压力。同时,可以依赖于po或NSLog来满足大多数容器类的调试需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接