【发布时间】:2015-07-04 06:47:29
【问题描述】:
我有一个班级,AWSUtil,我希望能够使用NSURLSessions获得图片上传和下载的进度
class AWSUtil : NSObject, NSURLSessionDelegate, NSURLSessionDownloadDelegate
我能够设置会话,并且它们可以工作
func sessionTest(url: NSURL){
let task = NSURLSession(
configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
delegate: self,
delegateQueue: NSOperationQueue.mainQueue()
).dataTaskWithURL(url){(data, response, error) in
//code
}
task!.resume()
}
但我的问题是委托方法,例如 NSURLSession didWriteData 没有被调用。
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){
//never called
}
我尝试实现不同的NSURLSession 协议并使类不符合NSObject,但都不起作用。无论我实现了哪些委托,或者我在类中放置了哪些委托方法,都不会调用它们。
我认为这是因为对象在被调用之前就被释放了,但我不确定。如果我想调用其中一个函数,我会使用
func awsTest(url: NSURL){
let aws = AWSUtil()
aws.sessionTest(url)
}
但是没有一个NSURLSessionDownloadDelegate 方法被调用。有没有办法解决这个问题,或者有解决方法吗?
【问题讨论】:
-
didWriteData是NSURLSessionDownloadDelegate而不是NSURLSessionDataDelegate的委托方法。 -
@0x141E 所有委托方法都会发生同样的事情,即使我实现了
NSURLSessionDownloadDelegate。我在问题中澄清了这一点 -
添加
deinit方法,并在其上设置断点。这样你就可以知道你的对象是否被释放了。 -
您是否尝试过不提供完成处理程序?我认为它要么调用委托方法,要么调用完成处理程序。
-
@luk2302 我也必须这样做才能解决问题。您可能想发布一个答案。谢谢