問題:
バイナリ ファイル コンテンツのリストで、標準の MIME タイプ (または UTI タイプ) に組み込みの iOS アイコンを使用できるようにしたいと考えています。
バックグラウンド:
新しい (3.2 以降の) ドキュメント アーキテクチャの使用を検討しましたが、UIDocumentInteractionController を使用すると、実際のバイナリが既にローカル デバイス上にあるという前提があるようです。
私の場合、リモートサーバーからのファイルリストがあり、リモートファイルの MIME タイプ、名前、タイトルなどを知っているので、アイコン付きのファイルリストを表示したいだけです (実際のバイナリは必要に応じてのみ読み込まれます)。
サーバーから取得したメタデータには、バイナリの適切な MIME タイプが含まれているため、理論的には、タイプに基づいてシステム アイコンを取得したいだけです。
回避策はありますか?
概念実証として次の「ハック」を試してみましたが、うまくいくようですが、これは最善の方法ではないようです...
//Need to initialize this way or the doc controller doesn't work
NSURL*fooUrl = [NSURL URLWithString:@"file://foot.dat"];
UIDocumentInteractionController* docController = [[UIDocumentInteractionController interactionControllerWithURL:fooUrl] retain];
UIImage* thumbnail = nil;
//Need to convert from mime type to a UTI to be able to get icons for the document
NSString *uti = [NSMakeCollectable(UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, (CFStringRef)self.contentType, NULL)) autorelease];
//Tell the doc controller what UTI type we want
docController.UTI = uti;
//The doc controller now seems to have icon(s) for the type I ask for...
NSArray* icons = docController.icons;
if([icons count] > 0) {
thumbnail = [icons objectAtIndex:0];
}
return thumbnail;