Geometry 関数
NSBundle
-画像リソースを取り出す
-NSDictionary や NSArray 型のリソースを使う
-.nib を名前と File's owner を指定して読み込む
NSDictionary
NSFileManager
NSMutableAttributedString
NSNumber
NSScanner
NSString
NSTimer
Graphic 関数
NSApplication
NSBezierPath
NSCell
NSColor
NSCursor
NSCustomImageRep
NSDocument
NSDocumentController
NSDragging
NSEvent
NSFontManager
NSGraphicsContext
NSImage
NSMenu
NSOutlineView
NSPanel
NSPopUpButton
NSResponder
NSScrollView
NSString 追加
NSTableColumn
NSTableView
NSTextStorage
NSTextView
NSToolbar
NSView
NSWindow
NSWorkspace
その他
.nib ウィンドウ
Views パレット
クラス
インスタンス変数
メソッド
CFXML
Carbon Event
Carbon Graphics
Cocoa で日本語
メソッド
その他

- 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;

クラスメソッドなんで、いきなり呼び出してオッケー。



[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp