Программа получила сигнал SIGABRT - PullRequest
9 голосов
/ 08 октября 2010

Я работаю в приложении для 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];

1 Ответ

15 голосов
/ 08 октября 2010

SIGABRT повышается функцией abort(3). Невозможно точно сказать, что происходит в вашей программе без дополнительной информации, но наиболее распространенные причины, по которым вызывается abort():

  • Вы отправляете сообщение объекту Objective-C, который не поддерживает / не реализует это сообщение. Это приводит к страшному «нераспознанному селектору, отправленному в экземпляр» error.
  • У вас где-то есть ошибочное утверждение. В сборках без отладки, которые определяют макрос NDEBUG, макрос стандартной библиотеки assert(3) вызывает abort(), когда утверждение не удается
  • У вас возникла ошибка с выделением памяти. Когда malloc / free обнаружит поврежденную кучу, он может позвонить abort() (см., Например, этот вопрос )
  • Вы генерируете необработанное исключение (либо исключение C ++, либо исключение Objective C)

Почти во всех случаях консоль отладки даст вам немного больше информации о том, что вызывает вызов abort(), поэтому всегда смотрите там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...