iPad 앱은 필요할 때 문서를 표시하고 오프라인으로 저장할 수 있습니다. 나는 그것을 보여주기 위해 DocumentViewController라는 이름의 QLPreviewController 서브 클래스를 가지고있다.QuickLook에서 오프라인 파일을 표시하려면 어떻게합니까?
응용 프로그램의 워크 플로 : - 사용자가 문서의 이름을 클릭하고 DVC가 눌러져 문서를 표시합니다. - DVC는 파일을 오프라인에서 다운로드하고 완료되면 보여줍니다. (따라서 HTTP URL이 다운로드되고 오프라인으로 저장되며 오프라인 URL이 반환됩니다.)
이상한 것은 PDF 파일 만 오프라인 URL로 작업하고 나머지는 충돌한다는 것입니다. 온라인 링크)
나는 몇 가지 테스트를했는데 오프라인 연결 전에 file : //을 넣을 때 응용 프로그램이 충돌하지 않지만 DVC가 파일에 대한 정보를 제공합니다 (예 : 97-2004 문서).
일부 정보는 전송되지만 문제가 무엇인지 파악할 수 없습니다.
다음은 일부 스크린 샷과 그 이후의 코드입니다.
코드 : 문서는 ID, 이름, 파일 유형 및 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'방법 로그인 : PDF 파일이 작동
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_20.pdf
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_80.docx
와 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가 워드 문서 (예 : 확장자)인지 여부에 대한 힌트가 없습니다.
[NSURL fileURLWithPath : ...]을 (를) 사용해 보셨나요? 파일 URL을 처리하는 방식은 매우 약합니다. – rbrown
"return [NSURL fileURLWithPath : fullPath];"로 변경했습니다. (위의 코드를 업데이트합니다.)하지만 여전히 동일한 문제가 있습니다. – Justin