【发布时间】:2016-09-14 10:34:43
【问题描述】:
我目前正在像往常一样开发一个 WS 调用,但我不知道为什么这只在我第一次调用它时才有效,数据第一次具有价值,但如果我再次调用它,它返回 nil。如果我查看响应,我可以看到当数据为 nil 时它返回一个 412 值。
// 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()
有人知道吗?
【问题讨论】:
-
dataTask 必须是对象属性,否则会在方法执行完成后立即释放。
-
如果发布了会有什么问题?如果我再次调用该方法,它是否会再次创建?
-
如果发布它不会返回任何数据。
-
问题是第一次可以工作,但第二次不行...它进入了completionHander但数据为nil:S
标签: ios swift nsurlsession nsurlsessiondatatask