我有一个由另一个程序员编写的工作程序,我正在尝试添加一些功能以努力学习iPhone SDK。我已经执行了我认为是一个相当简单的任务,即使用类似按钮向现有视图添加额外的UIButton。我使用其他UIButton作为模型,看起来这应该是一个简单的任务。
问题是当执行调用此子视图的行时,我得到TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION
的相当模糊的错误标志。在哪里可以找到有关此错误代码的更多信息?我看起来像一个非常普遍的错误,并且在Xcode shell中必须有一个地方可以让我更详细地了解这意味着什么?
我已经隔离了它出现的行,它似乎发生在对新视图的第一次引用上。接口构建器中的连接是否存在问题?任何建议都会有所帮助,因为我觉得我现在正抓住稻草......
答案 0 :(得分:1)
这可能意味着您在解除分配后使用了一些内存,或者在未初始化的情况下使用了内存。通常当您在此之后查看堆栈时,您将看到主循环执行自动释放的部分,这显然无法帮助您。
您真的需要很好地了解内存管理在Objective-C中的工作原理,然后再看看您的更改。这里没有真正的银弹。好消息是,经验会变得更容易。
这是一篇关于debugging in Objective-C的好文章。
答案 1 :(得分:1)
您希望在发生异常时捕获异常,然后您可以在调试器中对其进行跟踪。调试Cocoa应用程序是objc_exception_throw和 - [NSException raise]时使用的一组有用的断点。在iPhone中我认为所有异常都是通过objc_exception_throw进行的,但是如果你的目标是Tiger或更早,你应该在两者上设置一个断点。
http://www.cocoadev.com/index.pl?DebuggingTechniques有更多调试技巧。
答案 2 :(得分:1)
这是Objective-C运行时生成的异常。点击CMD-SHIFT-R打开调试器控制台。您将在窗口底部看到所有gdb启动信息,但如果向上滚动浏览堆栈信息,您将看到如下所示的内容:
[Session started at 2009-04-09 14:39:27 -0700.]
2009-04-09 14:39:31.246 LearnGLES[10415:20b] *** -[EAGLContext fakeMessage]: unrecognized selector sent to instance 0x528150
2009-04-09 14:39:31.248 LearnGLES[10415:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EAGLContext fakeMessage]: unrecognized selector sent to instance 0x528150'
2009-04-09 14:39:31.250 LearnGLES[10415:20b] Stack: (
2517758219,
2486509115,
....
这只是一个完整的示例异常,我通过更改代码将不存在的消息发送到对象来弥补,但是你可能会有很多可能性。任何会在任何Objective-C框架中生成运行时异常的东西都可能是罪魁祸首(日期格式化程序的不可解析日期,对象的无效消息等等)
答案 3 :(得分:0)
您在界面构建器中建立了什么连接?单击按钮时是否调用任何方法?在这种情况下,方法签名是什么?您是否对原始代码进行了任何更改,您可能会意外删除了一些重要的代码。如果你发布一些代码会有所帮助。例外是非常通用的。
答案 4 :(得分:0)
当我发布我没有明确分配的内容时,我遇到了类似的问题。 在我的情况下,我有一个背景图像UIImage * image = [UIImage ...],并将其设置为我的UIButton的背景,然后[图像发布]; 你不想做[图像发布]:UIButton现在拥有它,它将在不再需要时释放它。 也许你有类似的问题?