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

7
我的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


你可能需要编辑你的帖子,包括applicationDidFinishLaunchingviewDidLoad方法中正在发生的代码。此外,请确保您没有任何使用错误数据格式字符串(例如%d而应该是%@)的NSLogs,这些可能会导致崩溃而不显示任何错误消息。 - iwasrobbed
你的窗口加载看起来很正常,如果不是由于用户默认设置,我会建议你开始通过调试数据库检查代码或初始获取结果来解决问题。 - iwasrobbed
3个回答

1

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

如果您能提供堆栈跟踪,将更容易找到崩溃的原因。


很抱歉,当应用程序在代码中崩溃时,可能还没有到达入口点,因此根本没有任何崩溃日志。谢谢 - Sj - Sjblack

0

你看过日志文件了吗?

如果你将iPhone插入电脑,加载组织器(在XCode中选择Windows->组织器),然后选择设备日志,就可以将它们复制出来。

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

或者可能是你被卡在某些启动时运行的代码中 - 如果你的应用程序在适当的时间内没有启动(我记得是30秒内),iOS会将其杀死。


应用程序似乎没有任何崩溃日志。谢谢。 - Sjblack
我注意到的另一件事是,如果不重启设备就卸载应用并重新安装它,问题仍然无法解决!再次感谢。 - Sjblack

0

尝试不使用managedObjectContext部分,看看是否仍然崩溃。当您崩溃时,日志显示了什么?您是否收到内存异常?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接