iOS 6.0 QuickLook QLPreviewController 오류 : "로드 된 프록시의 미리보기 항목을 찾을 수 없습니다"
-
13-12-2019 - |
문제
My Application은 QLPreviewController를 사용하여 모든 유형의 파일과 iOS 5.x의 파일을 표시하는 것처럼 보였습니다.
iOS 6.0에서는 오류가 발생했으며 컨트롤러를 표시하지만 일정한로드 표시기가 있으며 실제로 아무 것도로드하지 않습니다.
로그의 오류는 다음과 같습니다. 로드 된 프록시에 대한 미리보기 항목을 찾을 수 없음 :
iOS 6.0의 QuickLook과 함께 다른 사람이 또는 다른 문제가 있습니까?또는 무엇을 시도 할 것인가?나는 iPhone과 iPad를 통해 컨트롤러를 밀고 제시하는 것을 통해 그것을 시도했습니다.
편집 : 문제의 URL (그들이 말하는 것은 나쁜 것이라는 것)이 파일 : // 그러나 file : // localhost에만 시작되는 반면, 실제 경로로 시작한 원래 파일 (예 : 파일 :/// 사용자).
해결책
잘 연구가 끝나고 기본 QuickLook Viewer를 작성한 후에도 오류가 계속 로그인되었음을 발견했지만 문서는 실제로 원래 프로젝트에서 발생하지 않았습니다. .
i 다음 QLPreviewController를 vavigationController 내에 넣고 동일한 문제로 끝나기 전에 QLPreviewController를 눌렀습니다. QLPreviewController를 UINAvigationController에 래핑 했으므로 NavigationItem을 사용자 정의 버튼을 지정하는 방법 이었기 때문입니다. 그것은 iOS 5.1에서 잘 작동했지만 (위에서 언급했듯이) 분명히 iOS 6.0이이를 좋아하지 않습니다.
UINAvigationController에서 QLPreviewController를 래핑 한 추가 코드를 제거하면 문서가 표시되는 것으로 보입니다.
포장 된 컨트롤러의 예 :
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= /
없이 더 이상 작동하지 않는 것 같습니다.update : previewItematIndex의 fileURL을 생성하도록 fileUrlWithPath를 사용하여 원래 오류가 멀리 떨어져 있습니다. 그러나 문서가로드되지 않는 곳에도 동일한 문제가 발생합니다.
새 오류 (다른 사람들이 보았던 다른 사람들도 보았습니다)는 다음과 같습니다.
경로에 대한 파일 확장명을 발행 할 수 없습니다. /users/me/library/application%20support/iphone%20simulator/6.0/applications/339ddf48-af93-41b5-b81e-a39440a131c6/documents/temp/welcome1.docx
최종 업데이트 : OK Extension 문제 / 오류는 [NSString stringByAddingPercentEscapesUsingEncoding]
가 이미 처리되어야 할 때 공백 (generacododiceTagcode 등)을 수동으로 추가하려고했기 때문입니다. 내가 그것을 제거한 후에는이 일을했고 지금은 이제 iOS 6예요!
따라서 실제 문제는 UINAvigationController와 아무 관련이 없었지만 실제로 PreviewItematIndex를 통해 전달되는 파일 URL이
다른 팁
누군가와 같은 문제가있는 경우이 오래된 질문에 대답하려고 생각했습니다.
Xcode를 사용하여 앱을 디버깅 할 때 각각 응용 프로그램의 UUID가 변경 될 때마다. 그러나 앱이 장치에서로드되는 경우에 적용되지 않습니다.
예 : 동일한 앱에 대한 다음 경로가 있습니다.
문서 경로 : ///// var / mobile / applications / cbf533a7-c19A-4336-A92C-DC1A48242A8A / 문서 / 문서 경로 : /// var / mobile / 응용 프로그램 / 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)입니다.
원격 URL에서 파일을 다운로드하고 로컬로 저장 한 것으로, 그런 다음 QLPreviewController를 사용하여 PDF를 표시합니다. 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];
}
. 1)
nsmutableArray * samplePDF= [[nsmutablearray alloc] initwithObjects : @ "sam1.pdf", @ "sam2.pdf", @ "sam3.pdf", @ "sam4.pdf", nil];
// 강력한 textDocument 디렉토리에서 PDF 파일을 드래그합니다.
2)
QLPreviewController * previewController= [[QLPreviewController Alloc] init]; previewController.DataSource= 자아; previewController.currentPreviewItemIndex= [IndexPath 행]; [Self ArestModalViewController : PreviewController 애니메이션 : 예];
3) #pragma 마크 QLPreviewControllerDataSource
// 미리보기 컨트롤러가 미리 볼 수있는 항목 수를 반환합니다.
- (nsinteger) numberOfPreviewItemSinPreviewController : (QLPreviewController *) PreviewController {
return [samplepdf count];
}
// 미리보기 컨트롤러가 미리 볼 수있는 항목을 반환합니다.
- (ID) PreviewController : (QLPreviewController *) PreviewController PreviewItematIndex : (NSInteger) 색인 {
nsString * DocumentSdirectoryPath= [[nsbundle MainBundle] ResourcePath];
.NSString *dataPath =[documentsDirectoryPath stringByAppendingPathComponent:[samplepdf objectAtIndex:index]]; NSURL *url = [NSURL fileURLWithPath:dataPath isDirectory:YES]; return url;
}