Наше приложение для iPad может отображать документы и сохранять их в автономном режиме при необходимости. У меня есть подкласс QLPreviewController с именем DocumentViewController (с этого момента он называется DVC) для их отображения.
Рабочий процесс приложения: - Пользователь щелкает имя документа, и DVC нажимается, чтобы показать документ. - DVC загружает файл в автономном режиме и показывает его по завершении. (Таким образом, URL-адрес HTTP загружается, сохраняется в автономном режиме, и возвращается автономный URL-адрес)
Странно то, что только файлы PDF работают с автономным URL-адресом, а остальные вылетает .. (он работает с онлайн-ссылками хотя)
Я провел несколько тестов, и когда я помещаю file: // перед офлайн-ссылкой, приложение не вылетает, но DVC предоставляет мне некоторую информацию о файле (например, это документ Excel 97-2004).
Итак, некоторая информация передается, но я не могу понять, в чем проблема.
Вот несколько снимков экрана, а затем код.
код: Обратите внимание, что 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 не подсказывает, является ли это, например, текстовым документом (только расширение).