2015-06-12 5 views
1

Мое приложение отображает PDF-файлы из списка. Я изо всех сил пытаюсь понять Управление файлами в iOS. Я читаю руководство здесь, но это не помогает: https://developer.apple.com/library/mac//documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010672Загрузка файла PDF и сохранение его во временный каталог iOS

Я не могу получить доступ к папке /tmp, чтобы написать ей. Я думаю, мне нужно будет использовать NSURLConnection с методом URLsForDirectory:inDomains:. Но я не знаю, какой параметр принимает метод URLsForDirectory:inDomains:, чтобы вернуть временный каталог и как преобразовать NSData* из NSURLConnection в файл PDF.

+0

Ссылка, которую вы указали, имеет то же содержание, что и мое. –

ответ

0

Вместо этого, вы можете сохранить файл в папку /Documents и удалить его позже, когда он не нужен.

Посмотрите:

+(NSString *)writeDataToDocuments:(NSData *)data withFilename:(NSString *)filename{ 
    NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 
    NSString *filePath = [[NSString alloc] initWithString: [docsPath stringByAppendingPathComponent:filename]]; 
    [data writeToFile:filePath atomically:YES]; 
    return filePath; 
} 
+1

Это неправильный ответ. Временные данные должны, при любых обстоятельствах, сохраняться в каталоге документов. – Groot

+0

Это против закона или что-то в этом роде? ИМХО, это зависит от характера временных данных. Поскольку в папке/tmp вы не можете контролировать срок службы данных, возможно, лучше использовать папку docs и самостоятельно управлять временным переносом. – user623396

+0

«При любых обстоятельствах» может быть немного суровым. :) Проблема с сохранением временных данных в документах напрямую заключается в том, что я могу быть скопирован iCloud (если не указано иное). Кроме того, каталог документов должен каким-то образом обрабатываться пользователем, а не «злоупотреблять» программистом. Когда пользователь решает загрузить PDF-файл, просмотрите его, а затем позже (сеансы приложений позже) решит удалить его, что PDF-файл должен быть включен в каталог «Документы». Но это уже не «временный» файл. – Groot

1

Вы получаете путь к файлу из файла, хранящегося в /tmp используя код ниже:

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];  // get /tmp folder path 

NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"filename"] URLByAppendingPathExtension:@"jpg"]; 

NSLog(@"fileURL: %@", [fileURL path]); 
2

1) Используйте NSURLConnection:

NSURL *fileURL = [NSURL URLWithString:@"your url here"]; 
NSURLSession *session = [NSURLSession sharedSession]; 
[[session dataTaskWithURL:fileURL completionHandler:^(NSData *data, 
                 NSURLResponse *response, 
                 NSError *error) 
{ 
    if(!error) 
    { 
     NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[response suggestedFilename]]; 
     [data writeToFile:filePath atomically:YES]; 
    } 

}] resume]; 

ИЛИ

2) Используйте NSURLSession:

NSURL *fileURL = [NSURL URLWithString:@"url here"]; 
NSURLSession *session = [NSURLSession sharedSession]; 
[[session dataTaskWithURL:fileURL completionHandler:^(NSData *data, 
                 NSURLResponse *response, 
                 NSError *error) 
{ 
    if(!error) 
    { 
     NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[response suggestedFilename]]; 
     [data writeToFile:filePath atomically:YES]; 
    } 

}] resume]; 

См.: nsurlsession-tutorial ссылка.

+0

Это дает предупреждение: 'Несовместимый указатель на целое преобразование, передающий 'NSString * (void)' в параметр типа 'NSSearchPathDirectory' (aka 'enum NSSearchPathDirectory')' –

+0

@ShantanuPaul: проверить отредактированный ответ, когда я заменил код предупреждения –

+0

Также повышает исключение. –

0
NSData *dataPdf = [NSData dataWithContentsOfURL:pdfOnline.url]; 

//Get path directory 
NSArray *paths = 
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,        
NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//Create PDF_Documents directory 
documentsDirectory = [documentsDirectory  
stringByAppendingPathComponent:@"PDF_Documents"]; 
[[NSFileManager defaultManager]  
createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:nil]; 

NSString *filePath = [NSString stringWithFormat:@"%@/%@",documentsDirectory, @"**PUT FILENAME YOU WANT**"]; 

[dataPdf writeToFile:filePath atomically:YES]; 
Смежные вопросы