Ошибки iOS 6.0 Quicklook QLPreviewController: не удается найти элемент предварительного просмотра для загруженного прокси

Мое приложение использовало QLPreviewController для отображения файлов всех типов, и в iOS 5.x, похоже, все было в порядке.

Теперь, в iOS 6.0, я получаю сообщение об ошибке, и он показывает контроллер, но с постоянным индикатором загрузки и никогда ничего не загружает.

Ошибка в журнале: Не удается найти элемент предварительного просмотра для загруженного прокси: ‹QLPreviewItemProxy: 0x8dbf480› - file://localhost/Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/E6A58F8D- 71F3-4C7A-B16E-4BA017E318E5/Documents/temp//Welcome.docx

У кого-нибудь еще есть эта или другие проблемы с Quicklook в iOS 6.0? Или есть предложения, что попробовать? Я пробовал это через iPhone и iPad, нажимая на контроллер и показывая его.

Изменить: также только что заметил, что рассматриваемый URL-адрес (тот, который они называют плохим) начинается не только с файла://, но и с файла://localhost, тогда как исходный файл только начинался с фактического пути (т.е.: файл:/// Пользователи).


person valheru    schedule 03.10.2012    source источник
comment
Еще немного информации: я попытался проверить + canPreviewItem в файлеUrl, прежде чем вернуть его в previewItemAtIndex, и он возвращает TRUE. Таким образом, в соответствии с контроллером, прежде чем он вернется из этого метода, URL-адрес действительно доступен для предварительного просмотра... помните, что URL-адрес - это тот, в котором нет хоста.   -  person valheru    schedule 04.10.2012
comment
Еще одно обновление: я попытался создать новый проект, использующий QLPreviewController. Подобные обстоятельства, и я обнаружил, что странная ошибка прокси-сервера все еще происходит, НО файл отображается! Так что теперь мне нужно выяснить, что отличается. Но тот факт, что ошибка все еще существует, все еще кажется подозрительным. Удивлен, что больше людей не испытали этого.   -  person valheru    schedule 04.10.2012


Ответы (4)


Что ж, после множества исследований и воссоздания с нуля базового средства просмотра QuickLook я обнаружил, что ошибка все еще регистрируется даже из этого, НО на самом деле отображались документы, которые не были из моего исходного проекта.

Затем я попытался поместить QLPreviewController в NavigationController перед его представлением и столкнулся с той же проблемой. Я обернул QLPreviewController в UINavigationController, прежде чем представить его, потому что это, казалось, был способ назначить navigationItem пользовательскую кнопку. Это отлично работало в iOS 5.1 (как указано выше), но, видимо, в iOS 6.0 это не нравится.

Удаление лишнего кода, который обертывал QLPreviewController в UINavigationController, казалось, позволяло отображать документ.

Пример запакованного контроллера:

QLPreviewController* previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
[previewer setCurrentPreviewItemIndex:0];

UINavigationController* previewNavCtrl = [[UINavigationController alloc] init];
[previewNavCtrl pushViewController:previewer animated:NO];

[self presentModalViewController:previewNavCtrl animated:YES];

Изменить на:

QLPreviewController* previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
[previewer setCurrentPreviewItemIndex:0];

[self presentModalViewController:previewer animated:YES];

Примечание: снова ошибка прокси-сервера все еще отображается в журнале, однако

ТАКЖЕ: кажется, что любые настройки UIBarButtonItem больше не работают без NavigationController =/

ОБНОВЛЕНИЕ. Я обнаружил, что использование fileURLWithpath для создания URL-адреса файла для previewItemAtIndex устранило исходную ошибку. Однако та же проблема возникает, когда документ не загружается.

Новая ошибка (которую я видел и у других людей):

Не удалось выдать расширение файла для пути: /Users/me/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/339DDF48-AF93-41B5-B81E-A39440A131C6/Documents/temp/Welcome1.docx

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ: Итак, проблема/ошибка расширения была вызвана тем, что я пытался вручную добавить %20 к пробелам (используя [NSString stringByAddingPercentEscapesUsingEncoding] и т. д.), тогда как [NSURL fileURLWithPath] уже должен это обрабатывать. Как только я удалил это, это сработало, и теперь я на iOS 6, ура! Таким образом, реальная проблема заключалась не в UINavigationController, а в том, что URL-адрес файла передавался через previewItemAtIndex.

person valheru    schedule 04.10.2012
comment
У меня та же проблема. Но мой удаленный URL. Что я должен делать? Любое предложение? - person Bagusflyer; 30.11.2012
comment
Я решил ошибку с помощью: fileURLWithpath. На самом деле приложение вылетало, когда я нажимал на правую кнопку. Спасибо!! - person xarly; 18.09.2013

Я думал ответить на этот старый вопрос, если кто-то столкнется с такой же проблемой.

Когда вы отлаживаете приложение с помощью Xcode, каждый раз меняется UUID приложения. Но это неприменимо, когда приложение загружается с устройства.

Например: я получил следующие пути для того же приложения.

Путь к документу: file:///var/mobile/Applications/CBF533A7-C19A-4336-A92C-DC1A48242A8A/Documents/ Путь к документу: file:///var/mobile/Applications/ADB99D3B-EACA-482D-BB8A-0C12B340A044/ Документы/

Это можно преодолеть, добавив следующее в - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES ) objectAtIndex:0];
NSURL *localDocumentsDirectoryURL = [NSURL fileURLWithPath:documentsDirectoryPath];
NSURL *fileURL =  [localDocumentsDirectoryURL URLByAppendingPathComponent:fileName isDirectory:NO];
return fileURL;

*fileName — это просто имя файла (medoc.pdf), которое вы можете найти в папке «Документ».

person Chinthaka    schedule 08.09.2014
comment
Это была моя проблема. Я совершал ошибку, сохраняя полный путь к документам, который включал UUID приложения. - person ppilone; 11.12.2015

Я загрузил файл с удаленного URL-адреса и сохранил его локально, а затем показываю PDF-файл с помощью QLPreviewController. В iOS 6 он работает.

Сначала я сохранил файл с удаленного URL-адреса, используя следующий код:

NSString *local_location;

    NSString *path = [[NSBundle mainBundle] pathForResource:@"sampleData" ofType:@"plist"];
        path = NSTemporaryDirectory();
    local_location= [path stringByAppendingPathComponent:[NSString stringWithFormat:@"My_Invoice.pdf"]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString: remoteurl]];
        [request setDownloadDestinationPath:local_location];
        [request startSynchronous];


For showing the Pdf :



QLPreviewController* preview = [[QLPreviewController alloc] init];
        preview.dataSource = self;
        [self presentModalViewController:preview animated:YES];





QLPreviewController delegate methods are :




- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
    return 1;
}

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{

    return [NSURL fileURLWithPath:local_location];


}
person Suresh    schedule 13.12.2012

1)

NSMutableArray * samplepdf = [[NSMutableArray alloc]initWithObjects:@"sam1.pdf",@"sam2.pdf",@"sam3.pdf",@"sam4.pdf", nil];

// Перетащите файл PDF в каталог с сильным текстовым документом

2)

QLPreviewController *previewController = [[QLPreviewController alloc] init]; previewController.dataSource = self; previewController.currentPreviewItemIndex = [строка indexPath]; [самостоятельный PresentModalViewController:previewController анимированный:YES];

3) #pragma отметить QLPreviewControllerDataSource

// Возвращает количество элементов, которые должен просмотреть контроллер предварительного просмотра

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController {

вернуть [количество образцов в формате PDF];

}

// возвращает элемент, который должен просмотреть контроллер предварительного просмотра

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index {

NSString *documentsDirectoryPath = [[NSBundle mainBundle]resourcePath];

NSString *dataPath =[documentsDirectoryPath stringByAppendingPathComponent:[samplepdf objectAtIndex:index]];

NSURL *url = [NSURL fileURLWithPath:dataPath isDirectory:YES];  
return url;

}

person Senthil    schedule 08.01.2013