iOS 在长时间运行任务后显示警报视图

Posted

技术标签:

【中文标题】iOS 在长时间运行任务后显示警报视图【英文标题】:iOS show alert view after long running task 【发布时间】:2013-08-22 13:54:22 【问题描述】:

我真的被我遇到的这个问题难住了。

所以我们有一个应用程序允许用户将一些照片同步到我们的服务器。所以我通过 dispath_async 调用实现了这一点并且它可以工作,但是我想告诉用户它是否已经成功完成天气。

所以我的问题是,当我不知道他们将在什么视图上时,我如何向用户显示一个 AlertDialog 框(因为它是异步的,我不希望他们必须留在那个 ViewController 上,而是在应用程序并在上传时执行其他操作)。

我尝试过:

[self showAlertView];
但这会使应用程序崩溃,因为我不再在该视图上。

比我试过的:

dispatch_async(dispatch_get_main_queue(), ^ UIAlertView* alert = [UIAlertView withTitle ....]; // 你明白了,只需创建一个简单的 AlertView [警报显示]; // 也尝试过:[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];在这里,那也不起作用 );

哦,LocalNotifications 不会起作用,因为如果它们在应用程序中它不会显示(android 在这方面有 ios 节拍,当用户进入时让它工作会容易得多应用程序,那么我就不必担心所有这些)。

关于如何实现我的目标的任何想法。

【问题讨论】:

dispatch_async() 应该可以工作。你确定程序执行到了那个块(即如果你在那里放了一个断点,它会停止吗)? 【参考方案1】:

即使应用程序在前台运行,您也可以使用UILocalNotification,但您必须自己处理通知。您可以只显示一个简单的 AlertView。

只需将其添加到应用委托类:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:notification.alertBody message:nil delegate:nil cancelButtonTitle:@"Oke" otherButtonTitles:nil];
    [alert show];


【讨论】:

效果很好,感谢您的快速回复。我看到你在 iOS 力量中很强大(因此有 30k 代表)=D。你只是让我的应用程序好一百万倍。再次感谢【参考方案2】:

您可以通过应用程序的窗口访问控制器来在当前控制器上显示模式视图。

UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *controller = window.rootViewController;
// Use controller to display your window.

【讨论】:

以上是关于iOS 在长时间运行任务后显示警报视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中实现长时间运行的后台任务

向客户端发送有关视图中长时间运行任务的进度的更新

在后台IOS实现长时间运行的任务

Swift 3 - 异步显示警报控制器,长功能在后台运行

雪花警报长时间运行的查询

很长时间后运行 gradle 任务失败