简短版本:在我的应用程序背景中,fetch的工作方式就像魅力一样,但是当我尝试在webview中加载内容时,它什么都不做!
长版本:我在项目中设置了正确的功能,设置了获取间隔并实现了
- (void) application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
Run Code Online (Sandbox Code Playgroud)
如例子中的方法,它的工作原理.但是,为了完成我的后台提取,我需要在UIWebView中加载一些内容.这不起作用.当我打电话时,只是过程以某种方式"迷路":
[myWebview loadRequest:request];
Run Code Online (Sandbox Code Playgroud)
(当然它在前景时有效,但在后台无效).
我也尝试强制将webview加载到主线程中,但系统只是暂停它,直到应用程序以前台模式返回(这是有意义的,我们在后台!)
那么,有一种方法可以在后台加载UIWebView吗?请注意我不能简单地用NSURLSession下载内容,因为网页包含加载一些框架的javascript(我不能要求重新设计网页).
编辑:当我写这个问题时,可能我没有足够的crear,但是在后台获取时尝试在main_queue中执行任务(使用dispatch_async o同样的方法)不起作用.在问之前我试过了......
当使用CouchCocoa框架时,我在CouchDB上遇到了一个"最佳实践"问题(实际上我正在使用TouchDB作为iOS的CouchDB端口).
我需要删除一堆通过查询获得的文档.我知道3种方法:
1)将所有文档放入NSArray,然后使用[CouchDatabase deleteDocuments:]
2)foreach查询行调用delete方法,如:for(CouchQueryRow*row in query.rows)[row.document DELETE];
3)创建一个发出_id,_rev属性并添加_deleted属性的查询,然后使用批量更新,如:[couchDatabase putChanges:]
性能更好的是什么?有更好的方法吗?