【问题标题】:Why debugger lldb says object is nil in iOS 5.1 simulator?为什么调试器 lldb 说对象在 iOS 5.1 模拟器中为零?
【发布时间】:2012-03-09 08:31:30
【问题描述】:

我写了一些类似的代码:

_myDataArray = [[NSMutableArray alloc] initWithCapacity : kNum];

for (int i=0; i<kNum; i++) {
    MyData *myData = [[[MyData alloc] init] autorelease];
    pageData.title = [NSString stringWithFormat:@"No.%d line", i];
    [_myDataArray addObject:myData];
}

iOS 4.3模拟器没有问题,但是lldb调试器说_myDataArray是nil

(lldb) po _myDataArray
(NSMutableArray *) $2 = 0x00000000 <nil>

在 iOS 5.0/5.1 模拟器中,Xcode 4.3.1 但 in view 的结果是正确的。

Xcode 4.3.2 看起来修复了这个问题。

【问题讨论】:

  • lldb 在什么时候说 _myDataArray 为零?如果您在代码中执行NSLog( @"_myDataArray is %p", _myDataArray);,它是否也显示为nil?你在用ARC吗? kNum 的定义是什么?
  • NSLog print _myDataArray 不为零。我发现问题是:我在 .h 文件中创建实例变量 NSMutableArray *_myPageDataArray,这是不对的。我应该在 .m 文件中创建它。
  • 您找到解决方案了吗?我刚刚遇到了这个问题,并尝试将变量定义移动到 m 文件中,但它没有解决问题。似乎有严重问题。
  • MagicSeth 尝试将变量设置为@private
  • Xcode 4.3.2 看起来修复了这个问题。

标签: xcode ios5 lldb


【解决方案1】:

我可以确认我们在使用 4.3.1 Xcode 的 5.0 和 5.1 模拟器上遇到了同样的问题。与 Xcode 4.2.1 和 5.0 模拟器相同的代码没有问题。注意到可变数组是按照它们在 .h 文件中的顺序分配的——在调试模式下单步执行 .m 代码很有趣,因为数组是乱序分配的。解决方案?等待 Apple 解决问题、报告错误等。

【讨论】:

  • 尝试将变量设置为@private
【解决方案2】:

我可以在 iDevice 和模拟器中确认 iOS 4.3、5.0 和 5.1 完全相同的问题。从 Xcode 4.3.1 到 4.3.2 的更新并不能解决这里的问题...

在方案设置中切换回 GDB 调试器可以解决问题。

【讨论】:

    【解决方案3】:

    我在 5.0 和 5.1 模拟器中的所有项目都有同样的问题。 XCode 4.3.3 为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2012-03-25
      • 1970-01-01
      • 2013-02-16
      • 2015-12-08
      • 2014-04-16
      • 2012-04-10
      相关资源
      最近更新 更多