2010-07-21 7 views
7

내 iPhone 응용 프로그램은 설치 후 처음 실행될 때 가끔 충돌합니다. 이 때마다 나는 애플릿을 실행하려고 할 때마다 결국 스플래시 화면이나 검은 색 화면에 남게됩니다. 응용 프로그램을 작동 시키려면 장치를 다시 시작해야합니다. 이 후 매번 잘 작동합니다. OS3 코드와 4 사이의 유일한 변경 사항은 'UIApplicationExitsOnSuspend'속성으로, 앱을 일시 중지하는 대신 항상 다시로드하도록합니다. 어떤 도움이라도 좋을 것입니다. 위에서 언급 한iPhone 응용 프로그램 충돌 (iOS4 전용)

- (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 - 설정을 통해 열거 NSUserDefaults에 defaultValues을 적용 번들 그들이 이미 회의에서 사용자에 의해 설정되지 않은 경우.

insertCheck - 오디오 녹음시 파일 무결성을 보장하기 위해 db에 대해 일부 쿼리를 수행하지만이 경우 응용 프로그램이 처음로드되기 때문에 아무 것도 수행하지 않습니다.

업데이트 : 여분의 메소드 호출 (위의 두)를 주석 처리하고 난 여전히 문제가 있습니다

.

해결책이없는 Apple 개발자 포럼에서 같은 종류의 문제가있는 사람들이 몇 명 있다는 것을 알고 있습니다. 한 개의 답변은 동일한 문제가있는 사용자로부터 왔지만 앱 스토어에서 승인 된 애플리케이션이었습니다.

감사합니다. Sj

+0

'applicationDidFinishLaunching'및 'viewDidLoad' 메소드에서 발생하는 상황에 대한 코드를 포함하도록 게시물을 편집하고 싶을 수 있습니다. 또한 잘못된 데이터 형식 문자열 (예 : % @ 일 때 % d)이있는 NSLogs가 없는지 확인하십시오. 오류 메시지가 표시되지 않고 충돌이 발생할 수 있습니다. – iwasrobbed

+0

윈도우로드가 정상적으로 보입니다. 사용자 기본값으로 인한 것이 아닌 경우 데이터베이스 체크 코드 또는 초기 패치 결과를 통해 디버깅을 시작하십시오. – iwasrobbed

답변

0

로그 파일을 보았습니까?

휴대 전화를 연결하고, 구성 도우미 (Windows-> Organizer in XCode)를로드하고 장치 로그를 선택하면 iPhone에서 복사 할 수 있습니다.

당신이 당신의 응용 프로그램이 충돌 시간에 대한 로그를 볼 경우, 당신이 몇 가지 코드를 실행에 갇혀 있다는 것을있을 수 또는

(이 충돌을 일으키는 기능을 포함한다) 호출 스택을 포함해야 시작할 때 - 응용 프로그램이 적시에 매너 (IIRC 30 초 이내)에 시작되지 않으면 iOS가이를 종료합니다.

+0

응용 프로그램과 관련된 크래시 로그가없는 것 같습니다. 감사. – Sjblack

+0

내가 알아챈 점은 앱을 제거하고 기기를 다시 시작하지 않고 다시 설치해도 문제가 해결되지 않는다는 것입니다. 다시 한번 감사드립니다. – Sjblack

0

managedObjectContext 조각없이 시도하고 여전히 충돌 중인지 확인하십시오. 당신이 추락 할 때 통나무는 무엇을 말합니까? 메모리 예외가 있습니까?

1

응용 프로그램이 충돌 할 때 디버깅하는 경우 응용 프로그램이 충돌하는 행을 표시하는 스택 추적을 가져와야합니다.

스택 추적을 제공 할 수있는 경우 크래시의 원인을 훨씬 쉽게 찾을 수 있습니다.

+0

나는 그것이 코드에서 응용 프로그램의 진입 점에 도달하지 못했기 때문에 두려워합니다. 그래서 모든 충돌 로그를 전혀 얻지 마십시오. 고마워요 ~ Sj – Sjblack