前回、「何だ、CreatorやTypeを付加するのは面倒だと聞いていたのに、簡単ではないか。」。そう思った方がおられたかもしれません。実はこんなに簡単になったのは、Jaguarが出てからです。それより前は、Carbonを呼ぶ必要がありました。
前回、JPEGファイルをダブルクリックし、それがTinyViewで表示されることにより、Creatorが付加されていることを確認しました。これだけではあんまりですので、もうちょっとちゃんと確認することにしましょう。TinyViewで保存したファイルをFinderで選択して、「ファイルメニュー」の「情報を見る」を選んで下さい。fig.01のようなパネルが表示されたと思います。Creatorを付加する前までは、fig.02の様になっていたはずです。どこが違うのか、見比べてみてください。
[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)。
[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)。
[fig.06] クリエイターはTNVW、タイプは空になっている |
実は今まで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)。
[fig.07] クリエイターはTNVW、タイプはJPEGになっている |
クラシック環境からResEditを立ち上げて、そちらでも見てみましょう。ちゃんとCreatorとTypeが変わっていることが確認できたと思います(fig.08)。
[fig.08] クラシック環境でも確認 |
ところで、前半の説明でアイコンが白紙になったのはTinyViewがJPEGのアイコンを持っていないからだと説明しましたが、たとえアイコンを持っていても、Typeをセットしないと実は表示されません。ただし、Openパネルからは表示されて見えますので、何をもってアイコンを表示するのかは、一貫性は無いようです。将来、Finderのバージョンが上がっただけでも、表示するようになるかもしれません。どちらにせよ、Creatorをセットするのなら、Typeも同時にセットした方がトラブルが少ないと思います。
それにしても、この様な連載をしていますと、普段はやらない手抜きを行ったりしますので、思わぬことに遭遇するものです。今回は私も勉強になりました。それでは次回以降、さらに手を入れて行くことにします。