Как я могу исправить эту ошибку SIGABRT с моим приложением?

Я в настоящее время разрабатываю приложение в Xcode 4 для IPhone, и я сталкиваюсь с этой ошибкой, "Поток 1: Программа получила сигнал: SIGABRT", Эта ошибка в моем коде main.m.

//
//  main.m
//  MyCard
//
//  Created by Nazar Gren on 2/2/12.
//  Copyright (c) 2012 Nazar Gren. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "mycardAppDelegate.h"

int main(int argc, char *argv[])
{
     @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([mycardAppDelegate         class]));
     }
 }

Моя ошибка появляется в строке под строкой пула @autorelease. В отладчике я получаю это сообщение: "Как правило, это означает, что другой экземпляр этого процесса уже запущен или завис в отладчике". И эта ошибка возникает только при попытке отладки приложения. Мое приложение даже не запускается. Кто-нибудь может помочь? Это будет с благодарностью.

4 ответа

Если это происходит на симуляторе, перезагрузите компьютер. Если это происходит на реальном устройстве, перезапустите устройство, а если проблема не исчезнет, ​​перезагрузите компьютер. Эта проблема возникала у меня несколько раз из-за зомбированного процесса, оставленного на устройстве / симуляторе, когда тест неожиданно прерывается. Простая перезагрузка исправит это.

Весь ваш код проходит через main.m, Так что вы действительно хотите увидеть трассировку стека, и здесь есть хороший пример, но я вижу, что вы используете autoreleasepool, поэтому вам понадобится что-то вроде

//
//  main.m
//  MyCard
//
//  Created by Nazar Gren on 2/2/12.
//  Copyright (c) 2012 Nazar Gren. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "mycardAppDelegate.h"

int main(int argc, char *argv[])
{
     @autoreleasepool {
        @try {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([mycardAppDelegate class]));
        } @catch (NSException *e) {
            NSLog(@"CRASH: %@", e);
            NSLog(@"Stack Trace: %@", [e callStackSymbols]);
        }
     }
 }

Вы удалили ссылку на что-то прикрепленное в вашей основной раскадровке?

Если это так, проверьте ссылки на выходы этого объекта, чтобы убедиться, что он все еще пытается указать на что-то, попробуйте удалить эту ссылку и снова запустить симулятор...

Это не в основном коде. Может быть где угодно. Пожалуйста, попробуйте инструмент зомби в инструментах. Вы, вероятно, пытаетесь получить доступ к объекту, который уже был освобожден. NSZombie скажет вам, что является объектом, и вы можете расследовать оттуда.

Другие вопросы по тегам