Swift dataTaskWithRequest 完成块未执行
Swift dataTaskWithRequest completion block not executed
我有一个功能,当出现错误时,post 将字典返回给服务器,return 状态代码或错误内容。它有时工作正常,而其余时间跳过完成部分。
func postData(url: String, query: NSDictionary) ->NSObject? {
var error: NSError?
var result: NSObject? = nil
let dest = NSURL("http://myUrl.com")
let request = NSMutableURLRequest(URL: dest!)
request.HTTPMethod = "POST"
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(query, options: NSJSONWritingOptions.allZeros, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if(error != nil){
println(error)
result = error
return
}
result = (response as! NSHTTPURLResponse).statusCode
return
}
task.resume()
return result
}
参考了NSURLSession dataTaskWithRequest not being called,知道可能是执行时滞导致的。但是,由于我需要状态代码(到目前为止 return 为零)来确定 post 之后要执行的操作,我想知道如何解决这个问题?
你的方法是异步方法,你不能从中得到return。
您可以传入一个块来处理您的操作 return
func postData(url: String, query: NSDictionary,finished:(NSObject)->()) {
var error: NSError?
var result: NSObject? = nil
let dest = NSURL("http://myUrl.com")
let request = NSMutableURLRequest(URL: dest!)
request.HTTPMethod = "POST"
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(query, options: NSJSONWritingOptions.allZeros, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if(error != nil){
println(error)
result = error
return
}
finished((response as! NSHTTPURLResponse).statusCode)
}
task.resume()
}
那就用吧
postData(url, dic) { (object:NSObject) -> () in{
//use here
}
我有一个功能,当出现错误时,post 将字典返回给服务器,return 状态代码或错误内容。它有时工作正常,而其余时间跳过完成部分。
func postData(url: String, query: NSDictionary) ->NSObject? {
var error: NSError?
var result: NSObject? = nil
let dest = NSURL("http://myUrl.com")
let request = NSMutableURLRequest(URL: dest!)
request.HTTPMethod = "POST"
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(query, options: NSJSONWritingOptions.allZeros, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if(error != nil){
println(error)
result = error
return
}
result = (response as! NSHTTPURLResponse).statusCode
return
}
task.resume()
return result
}
参考了NSURLSession dataTaskWithRequest not being called,知道可能是执行时滞导致的。但是,由于我需要状态代码(到目前为止 return 为零)来确定 post 之后要执行的操作,我想知道如何解决这个问题?
你的方法是异步方法,你不能从中得到return。
您可以传入一个块来处理您的操作 return
func postData(url: String, query: NSDictionary,finished:(NSObject)->()) {
var error: NSError?
var result: NSObject? = nil
let dest = NSURL("http://myUrl.com")
let request = NSMutableURLRequest(URL: dest!)
request.HTTPMethod = "POST"
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(query, options: NSJSONWritingOptions.allZeros, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if(error != nil){
println(error)
result = error
return
}
finished((response as! NSHTTPURLResponse).statusCode)
}
task.resume()
}
那就用吧
postData(url, dic) { (object:NSObject) -> () in{
//use here
}