【发布时间】:2014-01-29 19:50:05
【问题描述】:
我的应用程序需要执行一些与互联网相关的操作,然后在我将应用程序发送到后台时弹出该视图。然后根视图控制器获取一些数据并更新集合视图。您知道如何解决与上述操作相关的以下问题(顺便说一下,我使用本地通知来启动该过程):
1) UI 相关操作(弹出当前视图控制器)似乎在后台失败。
2) 当我将视图弹出到根视图控制器时,根视图有一些 nsurlconnection 将数据发送到其委托。由于长时间运行的任务在全局队列中运行,nsurlconnection 似乎无法向其委托发送任何信息。
我在这个过程中使用以下代码:
UIBackgroundTaskIdentifier __block bgTask;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
【问题讨论】:
-
“UI 相关操作(弹出当前视图控制器)似乎在后台失败。”如果您在后台,则没有 UI。这就是(部分)在后台意味着什么。您需要重新考虑整个架构。
-
谢谢你帮我节省了很多时间。
标签: objective-c multithreading objective-c-blocks background-process long-running-processes