我有一个班级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
方法。有没有办法解决这个问题,还是有解决方法?
答案 0 :(得分:1)
您正在致电dataTaskWithURL
。这是一种数据任务方法。数据任务有一个名为NSURLSessionDataDelegate
的协议。覆盖这些方法,例如URLSession:dataTask:...
。
didWriteData
,例如downloadTaskWithURL:,并且您没有调用下载方法。
如果您查看https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#//apple_ref/occ/instm/NSURLSession/downloadTaskWithURL :,在左侧的内容区域中,您会看到数据,下载和上传任务是分开的。每个都有相应的委托方法。