Как заставить QuickLook отображать автономные файлы?

Наше приложение для iPad может отображать документы и сохранять их в автономном режиме при необходимости. У меня есть подкласс QLPreviewController с именем DocumentViewController (с этого момента он называется DVC) для их отображения.

Рабочий процесс приложения: - Пользователь щелкает имя документа, и DVC нажимается, чтобы показать документ. - DVC загружает файл в автономном режиме и показывает его по завершении. (Таким образом, URL-адрес HTTP загружается, сохраняется в автономном режиме, и возвращается автономный URL-адрес)

Странно то, что только файлы PDF работают с автономным URL-адресом, а остальные вылетает .. (он работает с онлайн-ссылками хотя)

Я провел несколько тестов, и когда я помещаю file: // перед офлайн-ссылкой, приложение не вылетает, но DVC предоставляет мне некоторую информацию о файле (например, это документ Excel 97-2004).

Итак, некоторая информация передается, но я не могу понять, в чем проблема.

Вот несколько снимков экрана, а затем код.

enter image description here

код: Обратите внимание, что Document - это класс модели со свойствами документа, такими как идентификатор, имя, тип файла и URL.

//DVC QLPreviewController dataSource method for returning url
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger)index
{
    [SaveHelper saveDocumentFileAndPropertyWithDocument:document];

    //[SaveHelper getDocumentFileWithDocument:document]; without file://
    //if I return document.documentUrl it is working with all files except iworks files)
    return [SaveHelper getDocumentFileAsPathWithDocument:document]; //with file://
}

//SaveHelper methods
+ (NSString *)documentFilePathWithDocument:(Document *)document
{
    return [[self documentFilePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", DOCUMENT_FILE_PREFIX, document.documentId, document.documentType]];
}

+ (NSURL *)saveDocumentFileAndPropertyWithDocument:(Document *)document
{
    if([self saveDocumentPropertyWithDocument:document])
    {
        return [self saveDocumentFileWithDocument:document];
    }

    return nil;
}

+ (NSURL *)saveDocumentFileWithDocument:(Document *)document
{
    NSData *data = [NSData dataWithContentsOfURL:document.documentURL];

    NSString *fullPath = [self documentFilePathWithDocument:document];

   if([[NSKeyedArchiver archivedDataWithRootObject:data] writeToFile:fullPath atomically:YES])
   {
       return [NSURL fileURLWithPath:fullPath];
   }

    return nil;
}

+ (NSURL *)getDocumentFileWithDocument:(Document *)document
{
    return [NSURL fileURLWithPath:[self documentFilePathWithDocument:document]];
}

+ (NSURL *)getDocumentFileAsPathWithDocument:(Document *)document
{
    return [NSURL fileURLWithPath:[@"file://" stringByAppendingPathComponent:[[self getDocumentFileWithDocument:document] absoluteString]]];
}

Если требуется больше кода, просто скажите.

РЕДАКТИРОВАТЬ:

При регистрации URL-адрес, переданный через ' getDocumentFileAsPathWithDocument 'метод:

url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_20.pdf
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_80.docx

Где файл PDF работает, а docx нет

Когда я пытаюсь загрузить изображение (jpg) из локального хранилища, я получаю черный экран с этим сообщением об ошибке:

warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.5 (8L1)/Symbols/System/Library/Frameworks/QuickLook.framework/DisplayBundles/Image.qldisplay/Image (file not found).
warning: No copy of Image.qldisplay/Image found locally, reading from memory on remote device.  This may slow down the debug session.

РЕДАКТИРОВАТЬ:

Веб-просмотр также не работает с локальными URL-адресами. PDF в порядке, но в офисных файлах отображается сообщение «Невозможно прочитать документ, формат файла недопустим». Документы iWorks выдают ту же ошибку, что и quicklook. Я думаю, что это где-то при сохранении и загрузке формата, я сохраняю их как NSDATA, но после этого iPad не подсказывает, является ли это, например, текстовым документом (только расширение).

5
задан Justin 22 August 2011 в 08:44
поделиться