【发布时间】:2013-11-10 10:08:49
【问题描述】:
短版:在我的应用程序后台 fetch 就像一个魅力,除了当我尝试在 web 视图中加载内容时它什么都不做!
长版:我在项目中设置了正确的能力,设置了获取间隔并实现了
- (void) application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
示例中的方法并且它有效。但是,为了完成我的后台获取,我需要在 UIWebView 中加载一些内容。这是行不通的。当我打电话时,这个过程会以某种方式“迷路”:
[myWebview loadRequest:request];
(当然它在前台工作,但在后台什么也不做)。
我还尝试强制将 webview 加载到主线程中,但随后系统会简单地停止它,直到应用程序返回前台模式(这是有道理的,我们在后台!)
那么,有办法在后台加载 UIWebView 吗?请注意,我不能简单地使用 NSURLSession 下载内容,因为网页包含加载某些框架的 javascript(我不能要求重新设计网页)。
编辑:可能是我写问题时不够认真,而是尝试在 后台执行 main_queue 中的任务(使用 dispatch_async 或类似的方法)提取 不起作用。问之前我试过了...
【问题讨论】:
-
什么时候调用完成处理程序?
-
网页视图加载完毕后我等待调用它,但加载甚至没有开始
-
当您在后台运行时,Web 视图实际上是否在视图层次结构中(即它的
window属性是否返回某些内容)? -
是的:我的目标是在应用程序处于后台时重新加载 webview(这是我的应用程序的主 UI),以便在用户将应用程序返回到前台时显示它是最新的。
-
据我所知,如果 webview 不在视图层次结构中,则 webview 根本没有响应,当您执行 loadRequest 时,您的 webview 是否有 superView?我猜不是..