我有一个viewController使用DownloaderDelegate协议与DownloaderHandler进行通信。为什么我的方法没有被调用?
我的协议被定义为:
protocol DownloaderDelegate : class {
func didReceive(data:Data)
}
我有一个的viewController
class ViewController: UIViewController {
weak var downloadHandler : DownloaderHandler?
override func viewDidLoad() {
super.viewDidLoad()
downloadHandler = DownloaderHandler()
downloadHandler?.delegate = self
changeBackground()
}
func changeBackground(){
let googleURL = URL(fileURLWithPath: "https://www.google.com/doodle4google/images/splashes/featured.png")
print(googleURL)
downloadHandler?.downloadData(url:googleURL) // Line BB
}
}
extension ViewController : DownloaderDelegate{
func didReceive(data: Data) {
let image = UIImage(data: data)
let imageView = UIImageView(image: image!)
view.insertSubview(imageView, at: 0)
}
}
而且我有一个委派类为:
class DownloaderHandler : NSObject, URLSessionDelegate{
weak var delegate :DownloaderDelegate?
var downloadsSession: URLSession = {
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
return session // Line AA
}()
func downloadData(url: URL){ // Line CC
downloadsSession.dataTask(with: url){ data, response, error in
print("error is \(error), data is \(data) and response is \(response)") // Line DD
if let badError = error {
print(" the url didn't succeeed error is \(badError.localizedDescription)")
}
else if let someResponse = response as? HTTPURLResponse {
if someResponse.statusCode == 200{
self.delegate?.didReceive(data: data!)
}
}
}
}
}
使用断点:行AA,得到加载。 BB线电话。 CC线永远不会被调用。为什么?我究竟做错了什么?!
哈我误认这个'弱var委托:DownloaderDelegate? '。 – Honey
我已经添加了一个段落,试图猜测你在错误中的位置...... :) – matt
我删除了'weak'。现在我点击CC线,但我从来没有达到DD线,即完成处理程序中没有任何内容被执行。我的完成处理程序有什么问题吗? – Honey