Как я могу исправить эту ошибку 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 скажет вам, что является объектом, и вы можете расследовать оттуда.