私はAFHTTPRequestOperation
を使用して、大きなファイルを自分のデバイスのDocumentsディレクトリにダウンロードしています。いくつかの奇妙な理由AFHTTPRequestOperationがNSPOSIXErrorDomainを取得しています "そのようなファイルやディレクトリはありません"
NSURLRequest *request = [NSURLRequest requestWithURL:vectorFile.url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSString *path = [self pathForFileName:vectorFile.fileName];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
double percentDone = (double)totalBytesRead/(double)totalBytesExpectedToRead;
progress(percentDone, totalBytesRead, totalBytesExpectedToRead);
}];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSString *path = [self pathForFileName:vectorFile.fileName];
extracting();
[SSZipArchive unzipFileAtPath:path toDestination:[self path] progressHandler:^(NSString *entry, unz_file_info zipInfo, long entryNumber, long total) {
NSLog(@"Unzipping");
} completionHandler:^(NSString *path2, BOOL succeeded, NSError *error) {
if (!error) {
NSLog(@"Successfully downloaded file to %@", path);
dispatch_async(dispatch_get_main_queue(), ^{
completion(YES);
});
} else {
NSLog(@"%@", error);
failure(error);
}
}];
});
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
NSLog(@"%@", error);
failure(error);
}];
[operation start];
、それはファイルをダウンロードするためにシミュレータ上で動作しますが、デバイス(iPhone 6)の上に、私は次のエラーを取得する:
Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"
URLが正しいか、など私のブラウザに正しく、シミュレータでダウンロードされます。なぜこれはデバイス上で起こっているのでしょうか?それを引き起こす原因は何ですか?
私はデバイスの再起動とネットワーク設定のリセットを試みました。ヘルプの後
シミュレータとデバイスの間の3つの共通の問題の原因には、(a)バンドルに書き込むこと、 (b)大文字小文字の区別(macOSは一般に大文字小文字を区別しない; iOSは); (c)サンドボックス外のファイルにアクセスしようとする。パスが何であるかを示すと、何が起こっているのかを診断することができます。 – Rob
@Rob - ダウンロードパスまたはファイルを書き込むパスを知りたいですか? –
@Rob - そうだった!ストリーミングする前にまずディレクトリを作成しておき、問題を修正しました!それを答えとして追加したいですか? –