Сохранение и просмотр файлов в iOS - PullRequest
0 голосов
/ 12 февраля 2019

Я получаю содержимое файла в кодировке base64 с сервера.Затем я записываю данные в файл.Я проверил, что файл не пуст после этого, это означает, что данные были успешно записаны в файл.Но когда я пытаюсь представить этот файл, я получаю только пустое представление.Так что я не так делаю? введите описание изображения здесь

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [string dataUsingEncoding:NSUTF8StringEncoding];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Я вижу, что из вашего кода вы сохраняете строку в файл изображения (hill.jpg).UIDocumentInteractionController считывает файлы по их расширению, поэтому они не могут прочитать этот файл.Я думаю, что если вы измените имя файла на hill.txt, ваш код может работать.Надеюсь, это поможет.

0 голосов
/ 12 февраля 2019

Как вы говорите, контент, получаемый с сервера, кодируется в base64, поэтому вам необходимо его декодировать.

NSData *imageContent = [[NSData alloc] initWithBase64EncodedString:string options:kNilOptions];
if (imageContent) {
    // save to file
}
0 голосов
/ 12 февраля 2019

Отредактировал ваш код, попробуйте

[f getFile:^(NSString * _Nonnull string) {
                NSString *docsDir;
                NSArray *dirPaths;
                NSData *content = [[NSData alloc] initWithBase64EncodedString: string options:0];
                dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                docsDir = [dirPaths objectAtIndex:0];
                NSString *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"hill.jpg"]];
               [content writeToFile:databasePath atomically:YES];
                if ([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
                 NSURL *url = [NSURL fileURLWithPath:databasePath];
                UIDocumentInteractionController *documentInteractionController =[UIDocumentInteractionController interactionControllerWithURL:url];
                 documentInteractionController.delegate = self;
                 [documentInteractionController presentPreviewAnimated:YES];
                }
        } Error:^(NSString * _Nonnull errorMessage) {

      }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...