我正在制作文件下载程序。它需要暂停并恢复功能。 我想存储下载的数据或字节,并在已下载的字节之后恢复下载。
这是iOS 9或更高版本。我的Xcode版本是10.3。我正在使用Objective-C,NSURLSessionDataTask。
我已经尝试过cancel(byProducingResumeData:)
。但是我发现它不存储任何数据以恢复下载。
我尝试将范围放入我的HTTP标头请求中。喜欢
NSString *myRange = [NSString[NSString stringWithFormat:@"bytes %i-%f",myStartByte,myEndByte];
[myRequest addValue:range forHTTPHeaderField:@"Content-Range"];
[myRequest setHTTPMethod:@"GET"];
我尝试的两种方法均无效。有语法错误吗?我很麻烦。
@property (nonatomic) NSURLSession *DownloadSession;
@property (nonatomic) NSURLSession *DataSession;
@property (nonatomic) NSURLSessionDownloadTask* DownloadTask;
@property (nonatomic) *Data currentData;
....
-(void) download {
if (AlreadyDownloadByte < TotalDownloadByte)
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
DownloadSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSString *Range = [NSString[NSString stringWithFormat:@"bytes %i-%f",myStartByte,myEndByte];
[request addValue:range forHTTPHeaderField:@"Content-Range"];
[request setHTTPMethod:@"GET"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:myURL];
self->DownloadTask = [self->mDownloadSession downloadTaskWithRequest:request];
[self->DownloadTask resume];
}
}
-(void) pause {
[self->mDownloadTask cancelByProducingResumeData:^(NSData * _Nullable resumeData) {
self.currentData = resumeData;
}];
self->mDownloadSession = nil;
self->mDownloadTask = nil;
}
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
double alreadyDownloadSize = (double)totalBytesWritten;
}
我无法存储下载的数据。 我使用“ didwritebyte ...”存储了Downloaded Byte,但无论下载字节如何,我都从头开始重新开始下载。
加。
我不想使用NSURLSessionDataTask
。只想使用NSURLSessionDownloadTask
。
这是因为我已经不得不恢复NSURLDataTask
的问题。
我可以使用NSURLSessiondataTask
存储下载的数据,但是即使我取消了任务,它也不会停止接收和响应数据。
谢谢