如何使用我的应用修复此SIGABRT错误?

时间:2012-02-03 01:45:00

标签: iphone ios sdk 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 个答案:

答案 0 :(得分:8)

如果在模拟器上发生这种情况,请重新启动计算机。如果在真实设备上发生这种情况,请重新启动设备,如果问题仍然存在,请重新启动计算机。多次出现此问题,因为当测试意外中止时,设备/模拟器上会留下僵尸化进程。简单的重启就可以解决它。

答案 1 :(得分:2)

所有代码都通过main.m运行。所以你真正希望看到的是一个堆栈跟踪,这是一个很好的例子here,但我看到你正在使用自动释放池,所以你需要像

这样的东西
//
//  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]);
        }
     }
 }

答案 2 :(得分:1)

这不在主代码中。可以在任何地方。请在乐器中尝试僵尸工具。您可能正在尝试访问已释放的对象。 NSZombie会告诉你哪个是对象,你可以从那里进行调查。

答案 3 :(得分:1)

您是否删除了对主故事板中附加内容的引用?

如果是这样,请检查该对象的引用插座,看它是否仍在尝试指向某个内容,尝试删除该引用并再次运行模拟器...