有以下问题:
***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [NSURLSessionDataTask响应]:无法识别的选择器发送到实例0x7fced8599e60'
这是它的来源:
GET("users/check_email", parameters: parameters, progress: nil, success: { sessionDataTask, response in
//the line with error
let statusCode = (sessionDataTask.response as? NSHTTPURLResponse)?.statusCode ?? 0
completionBlock(self.queryType?.mockStatusCode ?? statusCode, nil)
}) { sessionDataTask, error in
completionBlock(nil, NSError(responseError: error))
}
当我尝试模拟响应时会发生这种情况。在某些代码处我转到success
块:
var sessionDataTask = NSURLSessionDataTask()
success?(sessionDataTask, queryType?.mockResponse())
sessionDataTask
错了。 NSURLSessionDataTask
继承自NSURLSessionTask
属性response
。不知道为什么会出现这个错误。
答案 0 :(得分:2)
如果你声明你的模拟NSURLSessionDataTask如下,响应将为零。
对象C:
NSURLSessionDataTask * sessionDataTask = [[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]] dataTaskWithURL:[NSURL URLWithString:@""]];
[sessionDataTask response];
夫特:
var sessionDataTask = NSURLSessionDataTask(NSURLSession(sessionWithConfiguration:NSURLSessionConfiguration.defaultSessionConfiguration()).dataTaskWithURL(NSURL(string: "")))
sessionDataTask.response()
答案 1 :(得分:0)
Apple文档说:
public class NSURLSessionTask : NSObject, NSCopying {
@NSCopying public var response: NSURLResponse? { get } /* may be nil if no response has been received */
}
因此,Swift的唯一解决方案是:
var statusCode = 0
if sessionDataTask.respondsToSelector(Selector("response")) {
statusCode = (sessionDataTask.response as? NSHTTPURLResponse)?.statusCode ?? 0
}