QLPreviewController
特定の条件下で動作しないことに関する他の投稿を確認しました。これは私を困惑させました:
RHBlobCollection
とRHBlobView
は、事前にキャッシュされたコレクションと個々の表示可能なファイルをそれぞれ保持するモデル/ビュー オブジェクトです。
RHBlobView.m:
- (IBAction) handleBlobTap:(UITapGestureRecognizer *)sender
{
QLPreviewController *previewController = [[QLPreviewController alloc] init];
// view tag is index in array of blobs
[previewController setCurrentPreviewItemIndex:self.tag];
// blobContainer is type RHBlobCollection
[previewController setDataSource:self.blobContainer];
UINavigationController *navController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];
[navController pushViewController:previewController animated:YES];
}
RHBlobCollection.m:
- (NSInteger) numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
return [self.blobs count];
}
- (id <QLPreviewItem>) previewController:(QLPreviewController *)controller
previewItemAtIndex:(NSInteger)index
{
RHBlobView *blob = self.blobs[(NSUInteger) index];
NSURL *fileURL = [RHCacheManager cachedFileURLForFilename:blob.filename withKey:blob.blobID];
// URL proper?
BOOL __unused proof1 = [fileURL isFileURL];
// QLPreviewController can stomach it?
BOOL __unused proof2 = [QLPreviewController canPreviewItem:fileURL];
// Cached file actually exists?
NSString *proof3path = [[fileURL resourceSpecifier] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding];
BOOL __unused proof3 = [[NSFileManager defaultManager] fileExistsAtPath:proof3path];
// Unless we're dealing with thumbnails, we're done. Return the URL of the resource.
if ( ! [blob hasThumbnails] )
{
return fileURL;
}
// Process thumbnails into .pdf file for display...
proof1
、proof2
およびproof3
すべてが返されYES
ます。別の概念実証プロジェクトに引き出され、QLPreviewController
想定どおりに機能します。ただし、私の完全なアプリ プロジェクトでは、iOS 6 で動作しますが、iOS 7 ではスピナーを使用して "読み込み中..." でハングします。
私の直感では、不正な形式のファイル URL またはパスと関係があるはずですが、私の小さなテストでは、すべてが無秩序であることが示されています。他の誰かがこれに問題を抱えていますか?