【发布时间】:2014-07-17 17:23:06
【问题描述】:
我在单例/共享实例中获得了以下方法,并希望向用户更新获取电子邮件的进度。
- (void)getAllImapEmailsForMailbox:(NSString *)mailbox completionBlock:(void (^)(BOOL success, NSString *errorString, NSArray *emails))block
首先我使用密钥解锁 API,然后连接到他们的 IMAP 服务器,然后使用他们的详细信息登录,然后选择特定邮箱,然后循环整个邮箱以下载消息。
所以我想知道如何将这些更新从单例方法获取到我的视图控制器,例如在 UIAlertView 中显示这些消息。
例如。正在连接.. 正在登录.. 正在选择邮箱.. 正在下载邮件 1 of 69..
我目前只发送 1 条消息说正在下载电子邮件,但它花费的时间太长,并且不希望用户认为应用程序挂起并且没有执行任何操作。这就是我正在做的:
UIAlertView *loadingView = [[UIAlertView alloc] initWithTitle:@"Downloading Emails..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[loadingView show];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self getAllEmailsForMailbox:@"Inbox"];
dispatch_async(dispatch_get_main_queue(), ^{
[loadingView dismissWithClickedButtonIndex:-1 animated:YES];
});
});
谢谢!
【问题讨论】:
-
仅供参考 - 您可能希望考虑使用 github.com/jdg/MBProgressHUD 而不是警报视图。
-
是的,我真的不在乎我使用什么,只是想知道如何将它从单例中拉到我当前的视图控制器中?
-
只需在代码中的不同时间发布不同的消息。如果您打算使用警报视图,则需要关闭旧视图并每次显示一个新视图。
-
我可以通过 NSLog “发布”它们没问题,但我不能使用 UIAlertView 或单例中的其他任何东西?
-
当然可以。你为什么不认为你可以?
标签: ios objective-c singleton instance objective-c-blocks