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

Sjb*_*ack 7 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];
Run Code Online (Sandbox Code Playgroud)

}

- (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];
}
Run Code Online (Sandbox Code Playgroud)

上面提到的其他方法:

    [taskListViewController setAppDefaults]
    [self insertCheck];
Run Code Online (Sandbox Code Playgroud)

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

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

更新:

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

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

谢谢Sj

Joh*_*bly 0

你看过日志文件吗?

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

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

或者,您可能陷入了启动时运行的某些代码中 - 如果您的应用程序没有及时启动(IIRC 30 秒内),iOS 就会杀死它。