-2

MailCoreを使用して電子メールクライアントを構築していますが、IMAPを使用して電子メールアカウントからメッセージを受信しようとしたときに小さな問題が発生しました。

これが私のviewDidLoadにあるコードです:

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];

問題は、アプリを実行すると起動せず、電話に空白の黒い画面が表示されることです。コードをコメントアウトしてみましたが、すべてうまくいきました。

ありがとう!

4

1 に答える 1

1

これにより、メイン (UI) スレッドの接続とメッセージのダウンロードがブロックされ、アプリの起動に許可されている時間 (約 20 秒だと思います) よりも簡単に長くかかる可能性があります。

MailCore には非同期 API がないようですので、バックグラウンドで自分で使用する必要があります。ディスパッチ キューを使用することをお勧めします ( dispatch_async()UIKit クラスへの弱い参照のみを使用する場合は、適切に使用するのはかなり簡単です)、またはNSOperationQueueバックグラウンドで実行することをお勧めします。

通常の並行性の警告が適用されます。

于 2013-03-22T22:59:25.383 に答える