相关疑难解决方法(0)

等待在Swift中完成异步操作

我不知道如何处理这种情况,因为我是iOS开发和Swift的新手.我正在执行数据提取,如下所示:

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!)
{
    loadShows()
    completionHandler(UIBackgroundFetchResult.NewData)
    println("Background Fetch Complete")
}
Run Code Online (Sandbox Code Playgroud)

我的loadShows()函数解析从加载到UIWebView的网站获得的一堆数据.问题是我有一个在loadShows函数中等待10秒左右的计时器.这允许在我开始解析数据之前完全加载页面中的javascript.我的问题是完成处理程序在我的loadShows()之前完成.

我想要做的是为"isCompletedParsingShows"添加一个bool,并使completionHandler行等待完成,直到该bool为真.处理这个问题的最佳方法是什么?

asynchronous ios swift

23
推荐指数
1
解决办法
4万
查看次数

最简单的解决方案,用于检查Web服务器上是否存在文件.(迅速)

关于这一点有很多讨论,我理解使用委托方法并检查响应"404"的解决方案:

var request : NSURLRequest = NSURLRequest(URL: url)

var connection : NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()

    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
//...
}
Run Code Online (Sandbox Code Playgroud)

但我想有一个简单的解决方案,如:

var exists:Bool=fileexists(sURL);
Run Code Online (Sandbox Code Playgroud)

因为我会在代理的同一个类中有很多请求,我只想用我的函数fileexists()来检查响应.

任何提示?

更新 我想我将不得不做如下的同步请求,但我总是得到0x0000000000000000作为响应::

   let urlPath: String = sURL;
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSURLRequest = NSURLRequest(URL: url)
    var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?
    >=nil
    var error: NSErrorPointer = nil
    var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)!
    var err: NSError
    println(response)
Run Code Online (Sandbox Code Playgroud)

nsurlconnection swift

3
推荐指数
2
解决办法
3086
查看次数

使用NSURLSession替换同步NSURLConnection的最佳实践

NSURLConnection sendSynchronousRequest:returningResponse:error:&connectionError
Run Code Online (Sandbox Code Playgroud)

设置已弃用我将不得不替换我很久以前写过的导入器.

进口商执行以下操作:

  1. 它从API-A获取数据.那里的数据可以在多个页面上.
  2. 它使用来自第一次获取(也是多次)的数据来查询来自API-B的数据并进行合并
  3. API-B查询的结果将与来自API-A的数据合并

我使用后台操作实现了这个,我使用每个API的方法,如果请求有多个页面,则递归调用.

但是由于NSURLSession不支持同步请求,我目前只看到有很多开销的选项(例如iVars)控制在完成块中调用的内容(例如,下一页或开始查询API-B).

那么,将这个带到NSURLSession会是一个优雅的解决方案.

注意:只是为了确保,我以前的解决方案根本不会阻止主线程.但那时候它是控制两个来源合并的最简单方法.

nsurlconnection ios nsurlsession

1
推荐指数
1
解决办法
2408
查看次数

标签 统计

ios ×2

nsurlconnection ×2

swift ×2

asynchronous ×1

nsurlsession ×1