Получение ошибки SIGABRT в основном файле

#ios4

#ios4

Вопрос:

Я получаю ошибку SIGABRT в моем основном файле и не знаю, что делать.

Поврежденный файл:

 #import <UIKit/UIKit.h>

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}
  

В сообщении об ошибке выделяется чтение строки:

 int retVal = UIApplicationMain(argc, argv, nil, nil);
  

и читает: «Поток 1: программа получила сигнал: «SIGABRT»

Можете ли вы сказать мне, что не так, и что мне нужно сделать, чтобы она скомпилировалась?

Спасибо.

Комментарии:

1. Просто чтобы уточнить, вы получаете эту ошибку во время компиляции или во время запуска вашей программы? SIGABRT — это ошибка времени выполнения, поэтому, если вы получили ее во время компиляции, возможно, вы сломали сам компилятор.

Ответ №1:

Это ошибка в другом месте вашего приложения. Вам нужно будет запустить отладчик и пройти по экрану, который вызывает сбой, пока вы не дойдете до строки, на которую он переходит SIGABRT main . Обычно это как-то связано с управлением памятью (чрезмерное освобождение объекта и затем доступ к нему) или неправильной инициализацией UIKit объектов, которые UIKit затем пытаются отобразить (что включает возврат объекта неправильного типа или случайное присвоение неправильного tag элементу пользовательского интерфейса, чтобы он отправил сообщение, которое он можетне обрабатывается). Однако, если это неправильная инициализация, вы должны вывести дополнительную ошибку, чтобы сообщить вам об этом.

РЕДАКТИРОВАТЬ: На самом деле, да, вы упоминаете, что он не может скомпилироваться? SIGABRT — это сигнал, отправляемый запущенному приложению, поэтому я не понимаю, как он может появиться во время компиляции.

Комментарии:

1. Обнаружена проблема. Была неполная реализация протокола источника данных UIPicker. Добавлен требуемый метод, и он скомпилирован нормально. Спасибо.

2. Не беспокойтесь 🙂 Если бы вы добавили протокол в свое определение класса @interface MyClass : UIViewController <UIPickerViewDataSource> , компилятор также выдал бы вам предупреждение за это. Обратите внимание, что полезно попытаться устранить все предупреждения компилятора, а не только ошибки.