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

时间:2015-07-04 06:47:29

标签: ios swift swift2

我有一个班级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方法。有没有办法解决这个问题,还是有解决方法?

1 个答案:

答案 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 :,在左侧的内容区域中,您会看到数据,下载和上传任务是分开的。每个都有相应的委托方法。