Открыть просмотрщик файлов (PDF) из приложения iOS - PullRequest
1 голос
/ 03 октября 2011

У нас есть код для загрузки PDF с сервера по протоколу SOAP.

Мы храним файл в папке «Документы» устройства iOs, и мы хотим, чтобы пользователь мог открыть файл.(обычно файлы PDF)

Но, по крайней мере на симуляторе, приложение не открыло файл успешно.

Конечно, я могу открыть файл вручную (чтобы проверить, что файл загружен идеально)

// Get the documents folder where write the content
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:documentDownloaded.fileName];

if ([[NSFileManager defaultManager] fileExistsAtPath:[self getFileCompletePath]]){
    NSString *filePath = [[NSString alloc] initWithFormat:@"%@", [self getFileCompletePath]];
    NSURL *url = [[NSURL alloc] initFileURLWithPath:filePath];

    if ([[UIApplication sharedApplication] canOpenURL:url]){
        [[UIApplication sharedApplication] openURL: url];
    } else {
        NSLog(@"Not supported application to open the file %@", filePath);
    }

    [url release];
    [filePath release];
}

Полный путь к файлу в симуляторе:

/ Пользователи / Пользователь / Библиотека / Поддержка приложений / iPhone Simulator / 4.3.2 / Приложения / 87800296-2917-4F26-B864-B20069336D1D / Documents / 0000907.pdf

Кто-нибудь знает, если что-то не так?

Файл может быть и электронной таблицей, pdf, изображением, документом ... но для первого обходного пути отлично подойдет только для pdf.

Спасибо,

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

омз ты был прав.Окончательное решение было следующим.

Мой контроллер реализовал UIDocumentInteractionControllerDelegate

Когда пользователь хочет открыть документ, код был следующим:

    NSString *filePath = [[NSString alloc] initWithFormat:@"%@", [self getFileCompletePath]];
    NSURL *url = [[NSURL alloc] initFileURLWithPath:filePath];
    UIDocumentInteractionController *documentController = [self setupControllerWithURL:url 
                                                                         usingDelegate:self];

    [documentController retain];
    [documentController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
    [url release];
    [filePath release];

Использование следующегометод, вы можете найти его в библиотеке разработчика Apple

- (UIDocumentInteractionController *) 
    setupControllerWithURL: (NSURL *) fileURL
    usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {

    UIDocumentInteractionController *interactionController =
      [UIDocumentInteractionController interactionControllerWithURL: fileURL];
    interactionController.delegate = interactionDelegate;

    return interactionController;
}

Наконец, мы включаем методы делегата:

#pragma mark methods for the UIDocumentInteractionControllerDelegate

- (void)previewDocumentWithURL:(NSURL*)url
{
    UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:url];
    preview.delegate = self;
    [preview presentPreviewAnimated:YES];
    [preview retain];
}

- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller
{
    [controller autorelease];
}

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
    return self;
}

- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller{
    return self.view.frame;
}

- (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller{
    return self.view;
}

Спасибо,

1 голос
/ 03 октября 2011

Невозможно открыть URL-адреса файлов методом UIApplication openURL:.Из-за изолированной программной среды другие приложения не могли получить доступ ни к каким файлам в папке «Документы» вашего приложения.

Вам необходимо использовать UIDocumentInteractionController, чтобы открывать документы, которые вы загружаете или создаете в других приложениях.

...