我正在使用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];
问题是当我运行我的应用程序时,它没有启动,我的手机显示空白的黑屏。我尝试评论代码,一切正常。
谢谢!
答案 0 :(得分:1)
阻止连接和下载消息的主(UI)线程,这可能比启动应用程序所需的时间更长(我认为大约20秒)。
看起来MailCore没有异步API,所以你必须自己在后台使用它。我建议使用调度队列(如果你只使用对UIKit类的弱引用,或dispatch_async()
使事情在后台运行,则NSOperationQueue
可以合理地直接使用)。
通常的并发警告适用。