2011-09-26 2 views
2

저는 제 능력이 끝났습니다. 내 앱이 배경으로 전환 될 때 MFMailComposeViewController을 기각해야만 할 수 있습니다. 그것은 어색한 응용 프로그램 상태를 만드는 끝납니다.올바른 방법으로 MFMailComposeViewController를 닫을 수 있습니다.

프로그래밍 방식으로 처리 할 수있는 방법이 있습니까? 아마도 이메일을 임시 보관함 폴더에 넣고 애니메이션을 사용하지 않고 닫도록보기 컨트롤러를 강제할까요?

편집 : 예상대로 - dismissModalViewControllerAnimated:

통화가 작동하지 않습니다.

응용 프로그램이 백그라운드에서 돌아 왔을 때 필자가 주로 생각하는 응용 프로그램 상태가 전자 메일 작성자 위에 다시 그려지는 것을 말하고 있습니다. 모달은 결코 해고되지 않으며 이메일 작성자는 다시 액세스 할 수 없습니다.

편집 : 내 초기화에

코드 : 내 배경 입국 핸들러

// For compatibility with iOS versions below 4.0 
if (&UIApplicationDidEnterBackgroundNotification != NULL) 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackgroundNotification:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
} 

코드 : 나는 당신이 위에있는 코드와 간단한 응용 프로그램을 재현

- (void) applicationDidEnterBackgroundNotification:(NSNotification *)note { 

    // Do some other stuff here 

    // According to the docs, calling the method like this closes all 
    // child views presented modally 
    [self dismissModalViewControllerAnimated:NO]; 
} 
+0

"어색한 응용 프로그램 상태"에 대한 자세한 내용을 제공 할 수 있습니까? – jrturton

+0

'applicationDidEnterBackground' 메소드를 보여주십시오. 지금 작곡가를 어떻게 해고하려고합니까? – jrturton

+0

'-dismissModalViewControllerAnimated :'를 사용하려고하는데 부모 뷰 컨트롤러 ('self'를 사용하여)와 전자 메일 모달보기 자체에서 호출하려고했습니다. 둘 다 일하지 않아. – Hyperbole

답변

0

. 응용 프로그램이 백그라운드로 들어갈 때 메일 작성자가 올바르게 닫힙니다.

따라서 코드의 //Do some other stuff here 섹션이 너무 많은 작업을하고 있으며 OS가 작곡가를 기각 할 기회를 갖기 전에 OS가 종료되고 있다고 가정 할 수 있습니다.

에 따르면 docs :

당신은이 방법을 종료하지만 (예 : 상태를 저장 등의) 다른 작업을하기 전에 사용자 인터페이스를 조정에 관련된 모든 작업을 동시 발송 대기열 또는 보조 스레드로 이동해야합니다 수행해야 필요에 따라. applicationDidEnterBackground에서 시작하는 모든 백그라운드 작업은 해당 메서드가 종료 될 때까지 실행되지 않으므로 해당 작업을 시작하기 전에 백그라운드 실행 시간을 추가로 요청해야합니다. 즉, 먼저 beginBackgroundTaskWithExpirationHandler :를 호출 한 다음 디스패치 대기열 또는 보조 스레드에서 작업을 실행합니다.

아마도 다른 물건을 다른 대화재로 옮기거나 추가 시간을 요청해야합니까? 다른 것들을 제거하면, 작곡가가 올바르게 닫습니까?

+0

맞았 어.정말 깨끗하지는 않았지만 UI를 주 스레드에서 유지하고 추가 배경 시간을 요청하는 것이 도움이되었습니다. – Hyperbole