2016-09-14 93 views
0

我目前正在像往常一样开发一个WS调用,但我不知道为什么这只在我第一次调用它时才起作用,数据第一次有价值,但如果我叫它再次返回零。如果我看看回复,我可以看到,当数据为零时,它会返回412值。NSURLSession dataTaskWithRequest只能第一次工作

// Request 
    var endPoint = Constants.CONFIG.WS_LANZADERA 

    if Utils.getEnviroment() == Constants.Environment.Develop.rawValue { 
     endPoint = endPoint + Constants.WS.SHIP 
    } 

    let request = NSMutableURLRequest(URL: NSURL(string: endPoint)!, 
             cachePolicy: .UseProtocolCachePolicy, 
             timeoutInterval: Constants.REQUEST.TIMEOUT) 

    request.HTTPMethod = Constants.HTTP.METHOD.POST 
    request.HTTPBody = shipParams.getDictionary().dataFromHttpParameters() 

    let session = NSURLSession.sharedSession() 

    // Handler 

    let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 

     if error == nil { 
      let jsonResult = JSON(data: data!) 
      if jsonResult["error"] != "" { 
       //.arrayObject 
       let proxaXMLData = jsonResult["ProsaXMLData"] 
       let SPM = proxaXMLData[3] 
       //let userList :Array<User> = Mapper<User>().mapArray(dict)! 
       //let user = userList[0] 
       self.webServiceDelegates.forEach({ (delegate) ->() in 
        if (delegate.respondsToSelector(#selector(WebServiceDelegate.responseShipListSuccess))) { 
         delegate.responseShipListSuccess?() 
        } 
       }) 
      } else { 
       self.webServiceDelegates.forEach({ (delegate) ->() in 
        if (delegate.respondsToSelector(#selector(WebServiceDelegate.responseShipListFailed(_:message:)))) { 
         delegate.responseShipListFailed!(jsonResult["error"]["code"].string!, message: jsonResult["error"]["message"].string!) 
        } 
       }) 
      } 

     } 
     else { 
      self.webServiceDelegates.forEach({ (delegate) ->() in 
       if (delegate.respondsToSelector(#selector(WebServiceDelegate.responseShipListFailed(_:message:)))) { 
        delegate.responseShipListFailed!(error!.code.description, message: error!.localizedDescription) 
       } 
      }) 
     } 
    }) 

    dataTask.resume() 

任何人都知道吗?

+0

dataTask必须是对象的属性,否则当方法执行完成后将会立即公布解决。 – iCoder

+0

如果它被释放了什么问题?如果我再次调用该方法,它将再次创建或不再创建? –

+0

如果它被释放它不会返回任何数据。 – iCoder

回答

0

改变的CachePolicy

let request = NSMutableURLRequest(URL: NSURL(string: endPoint)!, 
              cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, 
              timeoutInterval: Constants.REQUEST.TIMEOUT)