我有一個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