在 NSURLSessionData 的实现中未调用委托方法

Delegate methods not called in implementation of NSURLSessionData

我有一个class,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 协议并使 class 不符合 NSObject,但都不起作用。无论我实现什么委托,或者我在 class 中放入什么委托方法,都会调用其中的 none。

我认为这是因为对象在调用之前被释放了,但我不确定。如果我想调用其中一个函数,我会使用

func awsTest(url: NSURL){
    let aws = AWSUtil()
    aws.sessionTest(url)
}

但是正在调用 NSURLSessionDownloadDelegate 个方法中的 none 个。有什么办法可以解决这个问题,或者有解决方法吗?

您正在呼叫 dataTaskWithURL。这是一种数据任务方法。数据任务有一个名为 NSURLSessionDataDelegate 的协议。覆盖这些方法,例如URLSession:dataTask:...

didWriteData 在使用下载方法时调用,例如 downloadTaskWithURL:,而您不是在调用下载方法。

如果您查看 https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#//apple_ref/occ/instm/NSURLSession/downloadTaskWithURL:,在左侧的内容区域中,您会看到数据、下载和上传任务分别细分。每个都有对应的委托方法。