ios – 在后台获取中加载UIWebView

ios – 在后台获取中加载UIWebView,第1张

概述简短版本:在我的应用程序背景中,fetch的工作方式就像魅力一样,但是当我尝试在webview中加载内容时,它什么都不做! 长版:我在项目中设置了正确的功能,设置了获取间隔并实现了 - (void) application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFet 简短版本:在我的应用程序背景中,fetch的工作方式就像魅力一样,但是当我尝试在webvIEw中加载内容时,它什么都不做!

长版:我在项目中设置了正确的功能,设置了获取间隔并实现了

- (voID) application:(UIApplication *)application performFetchWithCompletionHandler:(voID (^)(UIBackgroundFetchResult))completionHandler

如例子中的方法,它的工作原理.但是,为了完成我的后台提取,我需要在UIWebVIEw中加载一些内容.这不起作用.当我打电话时,只是过程以某种方式“迷路”:

[myWebvIEw loadRequest:request];

(当然它在前景时有效,但在后台无效).

我也尝试强制将webvIEw加载到主线程中,但系统只是暂停它,直到应用程序以前台模式返回(这是有意义的,我们在后台!)

那么,有一种方法可以在后台加载UIWebVIEw吗?请注意我不能简单地使用NSURLSession下载内容,因为网页包含加载一些框架的JavaScript(我不能要求重新设计网页).

编辑:当我写这个问题时,可能我没有足够的crear,但尝试在main_queue中执行任务(使用dispatch_async o同样的方法),而在后台提取时则不起作用.在问之前我试过了……

解决方法 如果要从用户界面更新元素,则必须在应用程序的主队列(或线程)中访问它们.我建议您在后台继续获取所需的数据,但是当需要更新UIWebVIEw时,请在主线程中进行.你可以这样做:
dispatch_async(dispatch_get_main_queue(),^{        // Load fetched data in the Web VIEw    });

或者您可以创建一个方法来更新UIWebVIEw上的数据,并使用以下方法从后台线程调用它:

[self performSelectorOnMainThread:@selector(method:) withObject:fetchedData waitUntilDone:YES];

这将确保您从正确的线程访问UIWebVIEw.

希望这可以帮助.

总结

以上是内存溢出为你收集整理的ios – 在后台获取中加载UIWebView全部内容,希望文章能够帮你解决ios – 在后台获取中加载UIWebView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1099209.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存