【问题标题】:Program received signal SIGABRT节目接收信号 SIGABRT
【发布时间】:2010-10-08 04:05:09
【问题描述】:

我在 iPhone 应用程序中工作,我使用 UIImage 选择器控件从照片库中挑选图像,然后处理它并分别使用 UIImageview 和 UITextview 显示图像和相应的输出。对于某些图像,它工作正常,而对于某些图像程序崩溃了,在用断点检查时,我收到了类似 PROGRAM RECEIVED SIGNAL SIGABRT 的消息。任何人都可以建议我如何处理这个错误。 注意:对于我得到输出的每个图像,我都用断点检查它。 我的示例代码在这里,

显示图像:

 CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 240.0f);
 UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
 [myImage setImage:img];
 myImage.opaque = YES; // explicitly opaque for performance
 [self.view addSubview:myImage];
 [myImage release];

显示文本:

 CGRect frame = CGRectMake(0.0f, 250.0f, 320.0f,25.0f);
 UITextView * tmpTextView = [[UITextView alloc]initWithFrame:frame];
 tmpTextView.text = [NSString stringWithFormat:@"%@%@",@"value: ", somevalue];
 [self.view addSubview:tmpTextView];
 [tmpTextView release];

【问题讨论】:

  • 您可以编辑您的帖子以使代码具有语法突出显示吗?

标签: iphone objective-c ios4


【解决方案1】:

SIGABRT 由 abort(3) 函数引发。如果没有更多信息,就无法准确判断程序中发生了什么,但abort() 被调用的最常见原因是:

  • 您正在向不支持/实现该消息的 Objective-C 对象发送消息。这会导致可怕的"unrecognized selector sent to instance" 错误。
  • 您在某处有一个失败的断言。在定义宏 NDEBUG 的非调试版本中,标准库宏 assert(3) 在断言失败时调用 abort()
  • 您有一些内存踩踏/分配错误。当malloc/free 检测到损坏的堆时,可能会调用abort()(参见,例如this question)
  • 您正在引发未捕获的异常(C++ 异常或 Objective-C 异常)

在几乎所有情况下,调试控制台都会为您提供更多关于导致调用 abort() 的原因的信息,因此请务必查看那里。

【讨论】:

  • 感谢您的回复。我解决了这个问题。
  • @ashok : 如果你能告诉我们你是如何解决这个错误的,那将会很有帮助。
  • 在您自己的代码库中找到部分错误的好方法是打开异常断点(或确保您没有关闭断点:))。例如,这将向您显示您的哪个断言正在创建问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多