Cocoa Programming Tips 1001
Foundation
NSBundle
Foundation - NSBundle
画像リソースを取り出す
Keywords: image resource
Cocoa における、画像リソースの取り扱いの話だ。Cocoa では、標準の画像リソースは TIFF なんだ。PICT じゃないぜ。Project Builder に、.tiff ファイルを加えると、自動的にリソースファイルとみなされる。Interface Builder の方には、自動的に現れるぜ。
さて、この加えた画像リソースを、プログラムの中で取り出すにはどうすればいいか?いちばん手っ取り早いのは、pathForImageResource: を使う方法だ。
Application Kit/NSImage.h
@interface NSBundle(NSBundleImageExtension)
- (NSString *)pathForImageResource:(NSString *)name;
@end
NSImage.h の中で拡張されているので、注意。これを使えば、画像ファイルの名前を指定すると、そいつへのパスが得られる。そこで NSImage の initByReferencingFile: を使って読み出してやればよろし。
(sample)
NSBundle* mainBundle;
NSString* fileName;
mainBundle = [NSBundle mainBundle];
// リソースから画像を取得する
fileName = [mainBundle pathForImageResource:@"imageFileName"];
if(fileName) {
id image = [[NSImage alloc]
initByReferencingFile:fileName];
}
取り出した画像は、NSImage 型として使えるぜ。
Foundation - NSBundle
NSDictionary や NSArray 型のリソースを使う
Keywords: resource
Cocoa には、NSDictionary や、NSArray といった Collection クラスがあるよな。これらの型を、リソースとして自由に読み書きできたら、便利だと思わないか?Property List を使えば、そんな感じのことができるぜ。Property List ってのは、ほら、アプリケーション・パッケージの中にある、Info.plist みたいなやつだ。アプリケーションの情報を表すだけじゃなくて、汎用のデータリソースとしても使えるんだ。
まず、データを作ろう!リソースとして登録するには、Property List の書式に従う必要がある。これは、XML フォーマットなんだ。素のテキストなので、手で書いてもいい。だけど、PorpertyList Editor を使った方が便利だ。これを使うと、GUI を使って Property List が編集できる。ちなみに、Property List に含めることができるデータ型は、Dictionary、Array、String、Data、Date、Number、Boolean だ。ここんとこ注意。Dictionary のデータを作りたいときは、Root を Dictionary に、Array のデータが欲しいときは、Root を Array に設定するんだ。
そうやって作ったリソースを、パッケージの中に入れてやると、NSBundle を使って取り出すことができる。まず、pathForResource:ofType: を使って、パスを取得する。そして、その中身を、Dictionary だったら NSDictionary の dictionaryWithContentsOfFile: を、Array だったら NSArray の arrayWithContentsOfFile を使えば、読み出して、インスタンスとして格納することができるんだ。
(sample)
NSBundle* mainBundle;
NSString* fileName;
mainBundle = [NSBundle mainBundle];
// リソースのパスを取得
fileName = [mainBundle pathForResource:@"sample"
ofType:@"plist"];
if(fileName) {
id dict = [NSDictionary dictionaryWithContentsOfFile:fileName];
}
上の例では、'sample.plist' っていうファイルに、Dictionary 型のデータが入ってる、っていうことを想定してるものなんだ。こういう感じで、Dictionary や Array のリソースを使えるぜ。
Foundation - NSBundle
.nib を名前と File's owner を指定して読み込む
Keywords: loadNibNamed:owner:
バンドルの中にある .nib を、File's owner を指定してプログラムから読み込みたいときは、loadNibNamed:owner: を使おう。NSNibLoading.h に定義してあるので注意。
Foundation/NSNibLoading.h
+ (BOOL)loadNibNamed:(NSString*)nibName owner:(id)owner;
クラスメソッドなんで、いきなり呼び出してオッケー。