[NSURLSessionDataTask响应]:发送到实例的无法识别的选择器

时间:2015-12-16 08:34:44

标签: ios swift exception

有以下问题:

  

***由于未捕获的异常终止应用程序' 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。不知道为什么会出现这个错误。

2 个答案:

答案 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
}