Ios 将下载的PDF存储到文档目录不起作用

Ios 将下载的PDF存储到文档目录不起作用,ios,objective-c,nsdata,nsfilemanager,Ios,Objective C,Nsdata,Nsfilemanager,我有下面的代码,我不想进入我为什么这样做,但出于某种原因,这是不工作的。stringURL工作正常,它返回数据,但无法写入文档目录。这是我第一次处理文件,我一直在努力让它正常工作。请有人给我指一下正确的方向好吗 + (void) downloadAndStorePDFFromURLWithString: (NSString *) stringURL andFileID: (NSString *) fileID andTitle: (NSString *) title; { dispatc

我有下面的代码,我不想进入我为什么这样做,但出于某种原因,这是不工作的。stringURL工作正常,它返回数据,但无法写入文档目录。这是我第一次处理文件,我一直在努力让它正常工作。请有人给我指一下正确的方向好吗

+ (void) downloadAndStorePDFFromURLWithString: (NSString *) stringURL andFileID: (NSString *) fileID andTitle: (NSString *) title;
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       NSData *pdfData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: stringURL]];

       dispatch_async(dispatch_get_main_queue(), ^(void) {
          //STORE THE DATA LOCALLY AS A PDF FILE
          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
          NSString *documentsDirectory = [paths objectAtIndex:0];
          documentsDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat: @"%@/%@", fileID, title]];

          //GET LOCAL FILE PATH OF DOWNLOADED PDF
          //NSLog(@"SUCCESSFULLY DOWNLOADED DOCUMENT FOR FILE: %@ WILL BE STORED AT %@", fileID, documentsDirectory);
          BOOL success = [pdfData writeToFile: documentsDirectory atomically: YES];
          NSLog(success ? @"Yes" : @"No");

          //TELL TABLEVIEW TO RELOAD
          //[[NSNotificationCenter defaultCenter] postNotificationName: @"DocumentDownloaded" object: nil];

          //SAVE FILEPATH URL IN NSUSERDEFAULTS
          //[PDFDownloadManager addURLToListOfSavedPDFs: [PDFDownloadManager filePath: fileID andTitle: title] andFileID: fileID];
      });
   });
}

您正试图将文件写入Documents文件夹的子文件夹。此操作失败,因为子文件夹不存在。您需要先创建文件夹,然后才能对其进行写入

您还应该稍微清理一下代码。并使用更好的
NSData
方法编写文件

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *folder = [documentsDirectory stringByAppendingPathComponent:fileID];
[[NSFileManager defaultManager] createDirectoryAtPath:folder withIntermediateDirectories:YES attributes:nil error:nil];
NSString *filePath = [folder stringByAppendingPathComponent:title];

NSError *error = nil;
BOOL success = [pdfData writeToFile:filePath options: NSDataWritingAtomic error:&error];
if (!success) {
    NSLog(@"Error writing file to %@: %@", filePath, error);
}

非常感谢你!成功了!而且,我还没有做太多的工作来清理代码,只是开始被这些东西弄湿了脚。非常感谢你!