iPhone应用程序崩溃(仅限iOS4)

时间:2010-07-21 12:12:01

标签: iphone objective-c ipad ios4

我的iPhone应用程序在安装后第一次运行时偶尔会崩溃。在此之后,每次我尝试运行应用程序时,它都会保留在启动画面或黑屏上,直到它最终消失。我必须重新启动设备才能使应用程序正常工作。在此之后它每次都能正常工作。 OS3代码和4之间的唯一变化是属性'UIApplicationExitsOnSuspend',以强制应用程序每次重新加载而不是暂停。任何帮助都会很棒。

以下是两个代码段:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
    taskListViewController = [[TaskListViewController alloc] initWithNibName:@"TaskListView" bundle:nil];
    taskListViewController.managedObjectContext = self.managedObjectContext;

    [taskListViewController setAppDefaults];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:taskListViewController];
    [taskListViewController release];

    navController.navigationBar.tintColor = [UIColor blackColor];

    [window addSubview:[navController view]];
    [window makeKeyAndVisible];

}

- (void)viewDidLoad 
{
    NSLog(@"viewDidLoad - Start");
    [super viewDidLoad]; 

    NSError *error = nil;
    if(![[self fetchedResultsController] performFetch:&error])
    {
     NSLog(@"Error with initial fetch %@, %@", error, [error userInfo]);
    }

    [activityIndicator startAnimating];

    self.navigationItem.leftBarButtonItem.enabled = NO;
    self.navigationItem.rightBarButtonItem.enabled = NO;
    infoButton.enabled = NO;
    syncButton.enabled = NO;

    taskListTable.userInteractionEnabled = NO;
    taskListTable.allowsSelection = NO;

    checkingRecovery = true;
    [self insertCheck];
}

上述其他方法:

    [taskListViewController setAppDefaults]
    [self insertCheck];

setAppDefaults - 枚举通过设置包将defaultValues应用于NSUserDefaults(如果用户尚未在对象中设置它们)。

insertCheck - 对数据库执行一些查询以确保录音文件的完整性,但在这种情况下,这是第一次加载应用程序时它将无效。

更新

我已经注释掉额外的方法调用(上面两个),我仍然遇到问题。

我发现一些人在苹果开发者论坛上遇到了同样的问题而没有解决方案。一个回复来自具有相同问题的用户,但应用程序确实在应用商店获得批准。

谢谢Sj

3 个答案:

答案 0 :(得分:1)

如果在崩溃时调试应用程序,则应该获得堆栈跟踪,它将显示应用程序崩溃的行。

如果你能提供堆栈跟踪,那么找到崩溃的原因将会容易得多。

答案 1 :(得分:0)

你看过日志文件吗?

如果您插入iPhone,可以将它们从iPhone上复制下来,加载管理器(Windows-> XCode中的管理器)并选择设备日志。

如果您看到应用程序崩溃时的日志,则应该包含调用堆栈(应包括导致其崩溃的函数)

或者可能是你在启动时遇到了一些代码 - 如果你的应用程序没有及时启动(在30秒内IIRC),iOS会杀死它。

答案 2 :(得分:0)