6

我目前正在使用 Xcode 4.3.2 编写一个 iOS 应用程序。在我的大部分代码中,使用 LLDB 进行调试都可以正常工作。但是在某些时候,我在单步执行代码时收到一条奇怪的消息。当我将鼠标悬停在 iVar 上时,它会说

错误 [IRForTarget]:找不到 Objective-C 间接 ivar 符号 OBJC_IVAR_$_MyFancyClass.iVar

而不是向我展示价值。但是,在 中Variables View,我可以看到它就好了。直到我选择Print Description of ...那个,因为那时,Xcode 崩溃......当我使用 GDB 时,悬停工作但变量的类型和值是错误的。

我发现我的代码有问题,进而导致调试器失败。但是,代码运行良好。我很想提供一些示例代码,但课程相当长,我无法确定我搞砸的确切位置。那么有没有人遇到过类似的行为?

更新:实际上,这似乎发生在我的代码中的任何地方,而不仅仅是在某些特定文件中。如果有帮助,当 LLDB 显示上述消息时,GDB 总是显示拥有 iVar 的类的对象,而不是 iVar 本身。看起来好像内存管理有问题。例如,如果我说类似

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];

即使我有选择器也会被调用

[notificationCenter postNotificationName:bar object:objB];
4

3 回答 3

9

如问题帖子评论中的讨论所示,此错误的原因是不正确的构建设置。这可以通过将调试模式的“部署后处理”设置回 NO(默认值)来解决。

于 2012-04-13T16:42:55.040 回答
2

确保MyFancyClass.m已添加到您的目标

于 2012-04-06T13:57:19.930 回答
0

发送 nsnotification 的选择器需要一个(并且只有一个)参数,即 NSNotification。所以当你这样做时:

[notificationCenter addObserver:self selector:@selector(foo) name:bar object:objA];

-(void)foo
{

}

...你需要这样做:[notificationCenter addObserver:self 选择器:@selector(foo:) name:bar object:objA];

-(void)foo:(NSNotification *)notification
{

}

注意 notificationCenter 的选择器中的冒号,以及 foo 的参数。

于 2012-04-10T23:54:29.407 回答