我正在尝试使用AFNetworking 2.0创建iPhone文件下载程序(https://github.com/AFNetworking/AFNetworking)
我遇到了这段代码的随机问题:
-(void)downloadFile:(NSString *)UrlAddress
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:UrlAddress]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *documentsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *mp3Name = @"lol.mp3";
NSString *path = [NSString stringWithFormat:mp3Name,documentsDir];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
NSLog(@"Download = %f", (float)totalBytesRead / totalBytesExpectedToRead);
}];
[operation start];
}
当我调用此函数时,我随机得到这个:
Successfully downloaded file to ...
- >它的工作原理
Error Domain=NSURLErrorDomain Code=-1017 "cannot parse response"
- >所以下载是成功的,但程序告诉我们存在问题
错误域= NSPOSIXErrorDomain代码= 13“操作无法完成。权限被拒绝” - >所以没有下载,大部分时间都会发生这种情况。
我在网上找不到与这些问题相关的任何内容,这实际上很烦人,因为它是随机发生的。
感谢您的帮助,祝您度过愉快的一天。
答案 0 :(得分:1)
我的第一印象是您正在错误地检索文档目录。
NSString *documentsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *mp3Name = @"lol.mp3";
NSString *path = [NSString stringWithFormat:mp3Name,documentsDir];
如果查看此代码,路径将为:lol.mp3
由于这不是有效路径,因此下载失败。
应该采取的方式是:
NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *mp3Name = @"lol.mp3";
NSString *path = [documentsDir stringByAppendingPathComponent:mp3Name];