2013-03-21 1 views
-2

MailCore를 사용하여 전자 메일 클라이언트를 구축하고 IMAP을 사용하여 전자 메일 계정에서 메시지를받는 동안 약간의 문제가 발생했습니다. 문제는 내 응용 프로그램을 실행할 때, 그것은 실행되지 않을 것입니다MailCore IMAP 서버로 인해 앱이 다운 되나요?

CTCoreAccount *account = [[CTCoreAccount alloc] init]; 
     BOOL success = [account connectToServer:@"imap.mail.me.com" 
              port:993 
           connectionType:CTConnectionTypePlain 
             authType:CTImapAuthTypePlain 
              login:[keychain objectForKey:(__bridge id)kSecAttrAccount] 
             password:[keychain objectForKey:(__bridge id)kSecValueData]]; 
     if (!success) { 

      UIAlertView *alertView1 = [[UIAlertView alloc] initWithTitle:@"Error Checking Email" message:@"There was a problem checking your inbox, please try again later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alertView1 show]; 

     } 


     CTCoreFolder *inbox = [account folderWithPath:@"INBOX"]; 
     messages = [inbox messagesFromSequenceNumber:1 to:0 withFetchAttributes:CTFetchAttrEnvelope]; 
     [tableView reloadData]; 

내 전화는 빈 검은 화면을 보여줍니다 : 여기

이 내있는 viewDidLoad에서 내가 가지고있는 코드입니다. 나는 코드를 주석 처리 해 보았고, 모든 것이 작동한다.

감사합니다.

답변

1

메시지를 연결하고 다운로드하는 메인 (UI) 스레드를 차단합니다. 앱을 실행하는 데 허용되는 시간보다 쉽게 ​​오래 걸릴 수 있습니다 (약 20 초).

MailCore에는 비동기 API가 없으므로 직접 백그라운드에서 사용해야합니다. 백그라운드에서 실행되도록하려면 디스패치 대기열 (dispatch_async()은 UIKit 클래스에 대한 약한 참조 만 사용하면 올바르게 사용하는 것이 합리적입니다.) 또는 NSOperationQueue을 사용하는 것이 좋습니다.

일반적인 동시성 경고가 적용됩니다.

+0

@ranjha 내가 말했듯이, 아마도 메인 스레드를 차단하고 있었고 App Store 거부를위한 근거 일 수 있습니다. –