Сигабрт по главной функции

Я только начал изучать iOS, и теперь у меня есть sigabrt для моей основной функции. Ошибка инициируется вызовом:

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

Поскольку я очень новичок в программировании на iOS, я не знаю, что могло бы вызвать эту ошибку. Одна вещь, которую я нашел в моем стоп-лотке, вызывает следующее исключение: dyld_stub_objc_exception_throw Что может вызвать эту ошибку?

Ответы

Ответ 1

Это была типичная ошибка, когда кто-то изучал новый язык /API. Я забыл правильно настроить представление.

UIView *controllersView = [myViewController view];
[window addSubview:controllersView];

Ответ 2

У меня была эта проблема в X-Code 4.2, и проблема была в том, что он не смог найти мою раскадровку. Отвратительная часть заключалась в том, что не было никаких указаний на то, каково фактическое исключение. Я смог получить исключение в журнале, добавив try/catch к моей основной функции. (Обратите внимание, что я использую ARC, поэтому, если вы не используете ARC, ваш основной будет немного отличаться от try catch)

int main(int argc, char *argv[])
{
    int retVal = 0;
    @autoreleasepool {
        NSString *classString = NSStringFromClass([sortaAppDelegate class]);
        @try {
            retVal = UIApplicationMain(argc, argv, nil, classString);
        }
        @catch (NSException *exception) {
            NSLog(@"Exception - %@",[exception description]);
            exit(EXIT_FAILURE);
        }
    }
    return retVal;
}

Ответ 3

UIApplicationMain в основном запускает остальную часть вашего приложения, поэтому фактическая причина сбоя может быть в любом месте вашего приложения. Возможно, вам придется искать дальше в стеке вызовов.

Однако я отмечаю, что вы передаете nil в качестве последних двух параметров. Первым nil является аргумент principalClassName, который может легально быть нулевым, если вы хотите, чтобы UIApplication был основным классом. Второй nil - имя делегата приложения; вы должны передать nil, если вы загрузите делегата из основного ниба. Вы? Если вы этого не сделаете, это может быть проблемой (я не могу сказать, что я когда-либо вызывал эту функцию с обоими этими аргументами nil).