Cocoaでいこう! Macらしく 第16回
Yoshiki(DreamField)
この記事は、MOSAが発行するデベロッパ向けのデジタルマガジンMOSADeN 第76号(2003年7月29日発行)に掲載された記事です。2〜3ヶ月遅れで、ここに掲載して行きます。

前回、「何だ、CreatorやTypeを付加するのは面倒だと聞いていたのに、簡単ではないか。」。そう思った方がおられたかもしれません。実はこんなに簡単になったのは、Jaguarが出てからです。それより前は、Carbonを呼ぶ必要がありました。

Creatorが付いていることを確かめよう

前回、JPEGファイルをダブルクリックし、それがTinyViewで表示されることにより、Creatorが付加されていることを確認しました。これだけではあんまりですので、もうちょっとちゃんと確認することにしましょう。TinyViewで保存したファイルをFinderで選択して、「ファイルメニュー」の「情報を見る」を選んで下さい。fig.01のようなパネルが表示されたと思います。Creatorを付加する前までは、fig.02の様になっていたはずです。どこが違うのか、見比べてみてください。

Creatorを付加した後 Creatorを付加する前
[fig.01] Creatorを付加した後 [fig.02]Creatorを付加する前

ぱっと見て目に付くのはアイコンですね。Creatorを付加する前は、プレビューという標準で付いて来るアプリのアイコンが付いていますが、Creatorを付加した後は白紙アイコンです。これはTinyViewがJPEGのアイコンを持っていないからです(実は他にも理由があるのですが、それは後述。)。もう一つ違うのは、アイコンのすぐ下にある「種類」です。Creatorを付加する前は「JPEGイメージ」になっていましたが、Creatorを付加した後は「JPEG」になっています。この種類は何を元に表示しているのでしょうか。実はこれは、書類のタイプで「名前」に入力した文字列が表示されています(fig.03)。

書類のタイプの名前
[fig.03] 書類のタイプの名前

それにしても決定打に欠けます。そのものずばりが見たいですね。それではクラシック環境からResEditを立ち上げてみてみましょう(お持ちで無い方は、説明だけ読んで下さい。)。ResEditでGet File/Folder Infoで表示させてみます。するとCreatorが「ogle」のままです(fig.04)。

ResEditのGet File/Folder Info
[fig.04] ResEditのGet File/Folder Info

これはおかしいですね。それでは次のアプリをダウンロードしてみて下さい。

http://www.remus.dti.ne.jp/~yoshiki/PixelCat/

このPixelCatというソフトは、開いた画像ファイルのCreatorやTypeを表示することができます。

※ここで注意です。JPEGファイルを開く前に、PixelCatの環境設定を開いて「カスタムアイコンを付加する」を外しておいて下さい(fig.05)。他の設定は、お好きなようにしていただいてかまいません。

環境設定でカスタムアイコンを付加するを全部外す
[fig.05] 環境設定でカスタムアイコンを付加するを全部外す

それではPixelCatで、TinyViewで保存したファイルを開いてみましょう。そして、ファイルメニューから「情報を見る」を選んで下さい。情報表示パネルが開きますので、HFSクリエイターとHFSタイプを見て下さい。HFSクリエイターはちゃんとTNVWになっており、HFSタイプは空になっていることが分かると思います(fig.06)。

クリエイターはTNVW、タイプは空になっている
[fig.06] クリエイターはTNVW、タイプは空になっている

CreatorとTypeの両方をセットしないとClassic環境で問題が起こる

実は今までCreatorとTypeは、両方ともセットするか、両方ともセットしないか、このどちらかしか行ったことが無かったので、私自身知らなかったのですが、Creatorだけをセットするとクラシック環境とのやり取りで問題が起こるようです。考えてみましたら、Mac OSでは片方だけ付けるなんて出来ませんから、それが想定されていないことは十分考えられます。そこで前回のプログラムに手を入れ、両方セットするように改造しましょう。fileAttributesToWriteToFile:ofType:saveOperation:にコードを追加して次の様にして下さい。

- (NSDictionary *)fileAttributesToWriteToFile:(NSString *)fullDocumentPath
                                       ofType:(NSString *)documentTypeName
                                saveOperation:(NSSaveOperationType)saveOperationType
{
    NSDictionary *theDictionary;
    NSMutableDictionary *theMutableDictionary;
    NSNumber *theCreator;
    NSNumber *theType;

    theDictionary = [ super fileAttributesToWriteToFile:fullDocumentPath
                                                 ofType:documentTypeName
                                          saveOperation:saveOperationType];
    theMutableDictionary = [ NSMutableDictionary dictionaryWithDictionary:theDictionary];
    theCreator = [ NSNumber numberWithUnsignedLong:NSHFSTypeCodeFromFileType( @"'TNVW'")];
    [ theMutableDictionary setObject:theCreator forKey:NSFileHFSCreatorCode];
    theType = [ NSNumber numberWithUnsignedLong:NSHFSTypeCodeFromFileType( @"'JPEG'")];
    [ theMutableDictionary setObject:theType forKey:NSFileHFSTypeCode];
    return theMutableDictionary;
}

以下に書き加えた部分を記します。

8行目の

tNSNumber *theType;

16〜17行目の

theType = [ NSNumber numberWithUnsignedLong:NSHFSTypeCodeFromFileType( @"'JPEG'")];
[ theMutableDictionary setObject:theType forKey:NSFileHFSTypeCode];

本来なら、Typeはinfo.plistから取って来るべきで、ハードコーディングすべきではないと思いますが、TinyViewは学習用のプログラムですので、今は手を抜いておきます。

それでは、これでJPEGファイルを保存し直してみて下さい。そしてPixelCatで開いて、情報パネルでCreatorとTypeを見て下さい。今度はTypeも入っているはずです(fig.07)。

クリエイターはTNVW、タイプはJPEGになっている
[fig.07] クリエイターはTNVW、タイプはJPEGになっている

クラシック環境からResEditを立ち上げて、そちらでも見てみましょう。ちゃんとCreatorとTypeが変わっていることが確認できたと思います(fig.08)。

クラシック環境でも確認
[fig.08] クラシック環境でも確認

ところで、前半の説明でアイコンが白紙になったのはTinyViewがJPEGのアイコンを持っていないからだと説明しましたが、たとえアイコンを持っていても、Typeをセットしないと実は表示されません。ただし、Openパネルからは表示されて見えますので、何をもってアイコンを表示するのかは、一貫性は無いようです。将来、Finderのバージョンが上がっただけでも、表示するようになるかもしれません。どちらにせよ、Creatorをセットするのなら、Typeも同時にセットした方がトラブルが少ないと思います。

それにしても、この様な連載をしていますと、普段はやらない手抜きを行ったりしますので、思わぬことに遭遇するものです。今回は私も勉強になりました。それでは次回以降、さらに手を入れて行くことにします。

前頁目次次頁