ファイルのアイコンを取得する

一つ前のエントリーでは端折っていたが、ファイルのアイコンを取得するのが目的で、pathをあれこれやってあれってなったのであんなエントリーを残した。

せっかくなのでアイコン取得もメモ。


pathをStringでアイコン取得する場合。

//_fullPath はこんなのが来てる。 @"file://localhost/directory/index.html";
NSString *filePath =		
[[_fullPath stringByReplacingOccurrencesOfString:@"file:/localhost" withString:@""]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return [[NSWorkspace sharedWorkspace] iconForFile:filePath];

とかやる。前のエントリーのは、このケースでいうとfile://localhostを置換しようとしているのに、実際にはここに渡って来る前の文字列生成処理で、file:/localhostが渡ってきてた&decodeも抜けてたという話。


NSURLでアイコンを取得

//_fullPath はこんなのが来てる。 @"file://localhost/directory/index.html";
NSURL *fileUrl = [NSURL URLWithString:_fullPath];
NSImage *image=nil;
[fileUrl getResourceValue:&image forKey:NSURLEffectiveIconKey error:NULL];
return image;

file:/localhost状態の文字列をNSURLにして、アイコン取得できなくて、StringでもNSURLでもアイコンが取得出来ないなあと調べたら、file:/localhostになっちゃってるじゃないかというのが、前回のエントリの真相でした。

file://localhost/...を使っているのは、アプリがWebViewメインのものなので、このほうが都合がいいため。