Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未执行带请求完成块的Swift数据任务_Swift_Http Post_Nsurlsession - Fatal编程技术网

未执行带请求完成块的Swift数据任务

未执行带请求完成块的Swift数据任务,swift,http-post,nsurlsession,Swift,Http Post,Nsurlsession,我有一个函数,它将一个字典发布回服务器,并在出现错误时返回状态代码或错误内容。它有时工作正常,而其余时间则跳过完成部分 func postData(url: String, query: NSDictionary) ->NSObject? { var error: NSError? var result: NSObject? = nil let dest = NSURL("http://myUrl.com") let request = NSMutableURLR

我有一个函数,它将一个字典发布回服务器,并在出现错误时返回状态代码或错误内容。它有时工作正常,而其余时间则跳过完成部分

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
}

我提到过,并且知道它可能是由执行时间延迟引起的。但是,由于我需要状态代码(目前为止返回nil)来确定发布后要执行的操作,我想知道如何解决这个问题?

您的方法是异步方法,您无法从中获得返回

您可以传入一个块来处理带有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
}

您的方法是async方法,无法从此方法获取返回

您可以传入一个块来处理带有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
}

谢谢!现在状态代码已成功通过。谢谢!现在,状态代码已成功传递。