URLSession 完成处理程序应用程序崩溃
URLSession completion handler app crashes
我正在为 URLSession 使用 method swizzling,下面是我的 swizzled 方法。我不确定为什么应用程序在执行 @escaping 的完成处理程序时在目标应用程序中崩溃。请帮助我。
@objc func mytestTaskWithRequest(request: URLRequest,completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void ) -> URLSessionDataTask {
let completionHandler: (Data?, URLResponse?, Error?) -> Void = {(data, response, error) in
if error == nil {
DispatchQueue.main.async {
self.captureNetworkInfo(senderRequest: request, senderResponse: response!)
}
}
completionHandler(data,response,nil)
}
return mytestTaskWithRequest(request: request,completionHandler: completionHandler)
}
您的响应是空安全的,您使用 ! 强制它,如果响应 return 为空,那么您的应用程序将会崩溃
试试这个:
@objc func mytestTaskWithRequest(request: URLRequest,completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void ) -> URLSessionDataTask {
let completionHandler: (Data?, URLResponse?, Error?) -> Void = {(data, response, error) in
if error == nil {
DispatchQueue.main.async {
if let tempResponse = response {
self.captureNetworkInfo(senderRequest: request, senderResponse: tempResponse)
}
}
}
completionHandler(data,response,nil)
}
return mytestTaskWithRequest(request: request,completionHandler: completionHandler)
}
我正在为 URLSession 使用 method swizzling,下面是我的 swizzled 方法。我不确定为什么应用程序在执行 @escaping 的完成处理程序时在目标应用程序中崩溃。请帮助我。
@objc func mytestTaskWithRequest(request: URLRequest,completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void ) -> URLSessionDataTask {
let completionHandler: (Data?, URLResponse?, Error?) -> Void = {(data, response, error) in
if error == nil {
DispatchQueue.main.async {
self.captureNetworkInfo(senderRequest: request, senderResponse: response!)
}
}
completionHandler(data,response,nil)
}
return mytestTaskWithRequest(request: request,completionHandler: completionHandler)
}
您的响应是空安全的,您使用 ! 强制它,如果响应 return 为空,那么您的应用程序将会崩溃 试试这个:
@objc func mytestTaskWithRequest(request: URLRequest,completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void ) -> URLSessionDataTask {
let completionHandler: (Data?, URLResponse?, Error?) -> Void = {(data, response, error) in
if error == nil {
DispatchQueue.main.async {
if let tempResponse = response {
self.captureNetworkInfo(senderRequest: request, senderResponse: tempResponse)
}
}
}
completionHandler(data,response,nil)
}
return mytestTaskWithRequest(request: request,completionHandler: completionHandler)
}