除了使用初始化器之外,如何在10秒后停止NSURLRequest超时?

时间:2015-07-25 13:09:20

标签: ios objective-c swift nsurlconnection nsurlrequest

我通过TwitterKit API创建一个NSURLRequest来访问Twitter用户流,如下所示:

    let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod(
        "GET",
        URL: "https://userstream.twitter.com/1.1/user.json",
        parameters: parameters,
        error: &error)

这意味着我无法使用通常的初始化程序,并且可以访问超时间隔。因此,超时间隔设置为默认值10秒,并且在初始化后只读取。

当我开始这样的连接时:

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

我通过委托方法在前10秒获得结果,然后它被切断。

现在解决这个问题的方法是每次切断连接时重新启动连接,但这并不是理想的,显然存在丢失停机时间内任何数据的风险。 / p>

如果我试试这个,我只会收到一个错误:

Twitter.sharedInstance().APIClient.sendTwitterRequest(request, completion: {
    (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in

})

它返回一个空的响应和数据,错误为The request timed out.

如何在10秒后没有URL请求超时的情况下获得此流式响应?

1 个答案:

答案 0 :(得分:2)

我不熟悉Twitter API,但是如果该方法返回 NSURLRequest然后您可以制作一个可变副本并对其进行修改:

let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod(...)
let newRequest = request.mutableCopy() as! NSMutableURLRequest
newRequest.timeoutInterval = ...