Как просматривать файлы в приложении для iPhone?

#iphone #ios

#iPhone #iOS

Вопрос:

Я создаю приложение для iPhone, которое может сохранять вложения электронной почты. Я также хотел бы иметь возможность просматривать файлы внутри приложения. Мне нужно иметь возможность просматривать как можно больше типов файлов: .txt, .pdf, .png, .jpeg ., .doc, .xls и т.д.

Файлы будут находиться внутри папки документов моего приложения. Какое лучшее решение для этого? Моя первая мысль — преобразовать пути к файлам в URL-адреса и загрузить их в UIWebView, но я не уверен, что это лучший способ или он будет обрабатывать все эти типы файлов. Есть мысли?

Ответ №1:

Собственное почтовое приложение Apple делает это с помощью фреймворка QuickLook. Я бы посоветовал вам сделать то же самое. QLPreviewController делает всю тяжелую работу за вас. Вы также можете использовать UIDocumentInteractionController; это все еще использует QuickLook за кулисами для создания предварительного просмотра.

Комментарии:

1. Спасибо за предложение. Я попробовал, но при запуске контроллера я ничего не вижу и получаю следующее предупреждение: «предупреждение: невозможно прочитать символы для /Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.0 (9A334)/Symbols/System/Library/Frameworks/QuickLook.framework/DisplayBundles /Image . qldisplay / Изображение (файл не найден). предупреждение: нет копии изображения. qldisplay / Изображение найдено локально, считывается из памяти на удаленном устройстве. Это может замедлить сеанс отладки «. Есть предложения?

2. @user: рабочий пример в github.com/mattneub/Programming-iOS-4-Book-Examples/tree/master /…

3. @matt Ссылка переместилась, теперь правильная ссылка: https://github.com/mattneub/Programming-iOS-Book-Examples .

Ответ №2:

UIWebView — лучший способ показать файлы такого типа.

В качестве альтернативы вы можете попробовать прочитать документ в другом приложении с помощью этого кода:

         UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController interactionControllerWithURL:document.documentURL] retain];
        interactionController.delegate = self;
        BOOL canOpenDocument = [interactionController presentOpenInMenuFromRect:CGRectMake(365, 200, 300, 400) inView:self.view animated:YES];

        if(!canOpenDocument) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Your phone can't read this kind of file, please install an app from appstore for that" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
            [alert release];
        }
  

Комментарии:

1. Если все, что он хочет сделать, это показать предварительный просмотр, глупо передавать документ другому приложению, если QuickLook уже знает, как его отобразить. Вместо того, чтобы использовать UIDocumentInteractionController для передачи документа другому приложению, он должен использовать UIDocumentInteractionController, чтобы оставаться там, где он есть, и отображать предварительный просмотр! Фактически это то же самое, что и при использовании QLPreviewController.