Sto cercando di scrivere i dati in un file con il seguente codice in un blocco di completamento per NSURLSessionDownloadTask
:Errore: il file ... non esiste al momento della chiamata writeToFile su imageData
void (^completionBlock)(NSURLResponse *response, NSURL *filePath, NSError *error) = ^void (NSURLResponse *response, NSURL *filePath, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!error){
NSData *imageData = [NSData dataWithContentsOfURL:filePath];
if(imageData) NSLog(@"image is not null");
if(pic == 1) self.imageView.image = [UIImage imageWithData:imageData];
else if(pic==2) self.imageView2.image = [UIImage imageWithData:imageData];
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsDirectoryURL = [paths lastObject];
NSURL *saveLocation;
if(pic == 1) saveLocation = [documentsDirectoryURL URLByAppendingPathComponent:self.pictureName1];
else if (pic == 2) saveLocation = [documentsDirectoryURL URLByAppendingPathComponent:self.pictureName2];
else saveLocation = [documentsDirectoryURL URLByAppendingPathComponent:self.pictureName3];
NSLog(@"for # %d writing to file %@", pic, saveLocation);
NSError *error = nil;
[imageData writeToFile:[saveLocation absoluteString] options:NSAtomicWrite error: &error];
if(error){
NSLog(@"FAILED\n\n\n %@ \n\n\n", [error description]);
}
}
sono in grado di visualizzare le immagini scaricate in UIImageViews
e il mio controllo nullo su imageData
conferma inoltre che non è nullo. Tuttavia, quando provo a scrivere i dati in un file, I miei NSLog
stampa la seguente errore che indica che non è riuscita la scrittura:
(log statements)
# 3 writing to file file:///var/mobile/Containers/Data/Application/3743A163-7EE1-4A5A-BF81-7D1344D6DA45/Documents/pic3.png
Error Domain=NSCocoaErrorDomain Code=4 "The file “pic1.jpg” doesn’t exist."
UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/3743A163-7EE1-
4A5A-BF81-7D1344D6DA45/Documents/pic1.jpg, NSUnderlyingError=0x16d67200 {Error
Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
non sono stato in grado di trovare un'altra domanda su SO che indica questo messaggio di errore per questo file, e sto trovando il messaggio di errore piuttosto controintuitivo. Dov'è il mio errore?
Provare a utilizzare le API di file correlati, piuttosto che quelli URL legati uno. O almeno controlla cosa '[saveLocation absolutString]' e se la directory esiste. – trojanfoe
@trojanfoe perché le API relative ai file sono migliori? – helloB
Poiché si tratta di un valore relativo al file che si desidera come risultato (da dare a 'writeToFile:'). – trojanfoe