私たちのiPadアプリはドキュメントを表示し、必要に応じてオフラインで保存できます。 私はそれらを表示するためにDocumentViewController(今からDVCという名前)という名前のQLPreviewControllerサブクラスを持っています。QuickLookでオフラインファイルを表示するにはどうすればよいですか?
アプリのワークフロー: - ユーザーがドキュメントの名前をクリックし、そのドキュメントを表示するためにDVCがプッシュされます。 - DVCはファイルをオフラインでダウンロードし、完了したら表示します。 (したがって、HTTP URLがダウンロードされ、オフラインで保存され、オフラインURLが返されます)
奇妙なことは、PDFファイルのみがオフラインURLで動作し、残りがクラッシュすることです私はいくつかのテストを行いました。オフラインリンクの前にfile://を置くと、アプリケーションはクラッシュしませんでしたが、DVCはファイルに関するいくつかの情報を表示しています(それはExcel 97-2004資料)。
情報の一部は転送されますが、問題の原因を特定できません。
ここにいくつかのスクリーンショットがあり、その後にいくつかのコードがあります。
コード:Documentは、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]]];
}
もっとコードが必要な場合は、ちょうど言う。
編集:私はイメージをロードしようとすると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ない
:
URL渡さトラフ 'getDocumentFileAsPathWithDocument' メソッドをロギング(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.
編集:
webviewはローカルURLで動作しません。 PDFは正常ですが、オフィスのファイルに「ドキュメントを読み取れません。ファイル形式が無効です」というメッセージが表示されます。 iWorksのドキュメントでは、Quicklookと同じエラーが発生します。私はそのフォーマットの保存と読み込みのどこかで、NSDATAとして保存しますが、それ以降は、例えばワードドキュメント(拡張子のみ)であるかどうかを確認するヒントはありません。
[NSURL fileURLWithPath:...]を使用してみましたか?ファイルURLを処理する方法は非常に脆弱です。 – rbrown
私はそれを "return [NSURL fileURLWithPath:fullPath];に変更しました。 (私は上記のコードを更新する)、私はまだ同じ問題があります。 – Justin