2008-09-15 21 views

回答

5

我见过多次在那里,当你试图访问一个对象,你没有保留适当所以它要么不指向你的对象或其指向的有效副本会发生这种情况另一种类型的对象早期放置断点并分析对象的步骤通过启动使用po和打印在gdb中是最好的选择

-3

这是一个可能的原因。有一个IBOutlet对象没有被初始化,并且在nil上调用了一条消息。堆栈跟踪可能是这样的:

#0 0x90a594c7 in objc_msgSend 
#1 0xbffff7b8 in ?? 
#2 0x932899d8 in loadNib 
#3 0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:] 
#4 0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:] 
#5 0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:] 
#6 0x93288cc3 in NSApplicationMain 
#7 0x00009f80 in main at main.mm:17 

由于堆栈跟踪是没有帮助的,你将不得不步代码中查找错误。如果由于某种原因,您无法在执行早期设置断点,请尝试插入一些Debugger();调用将打破调试器。

+0

消息到零在Objective-C中不是错误。 – mmalc 2008-10-16 15:14:35

0

补充:最重要的原因解除封存失败是忘记“回归自我”;来自自定义类的-init。它伤害了很多:(

0

检查控制台日志(Applications/Utilities/Console.app)当程序崩溃时启动,并有一些错误的初始化,就经常写一些有用的错误信息出现,它崩溃之前。

2

这通常表示内存管理错误。

确保所有出口报关单遵循最佳实践:

@interface MyClass : MySuperclass { 
    UIClass *myOutlet; 
} 
@property (nonatomic, retain) IBOutlet UIClass *myOutlet; 
@end 

这种格式可以确保您有任何超在任何平台上获得的内存管理权。

检查任何awakeFromNib方法,以确保您不要过度释放对象等

1

一个新的答案,一个古老的线程... XCode中4诊断EXC_BAD_ACCESS例外的最有效的方法是使用仪器分析您的应用程序(从XCode单击产品/配置文件并选择僵尸)。这将帮助您识别发送到释放对象的消息。

相关问题