Macintosh Developer Online (MDOnline)


2002年1月8日発行号 - iMacやiPhotoの発表会



iMac実物を見てきました。それから、まさに今頃、有楽町のさくらやあたりで展示されるみたいなのです。ユニークなデザインですけど、ある意味では奇抜ではないですね。すぐに慣れる感じじゃないかと思います。大きいのかどうかは判断しづらいですが、真っ白なところから、ドライブのベイがぬっと出てくるって感じです。いずれにしても、クールにまとまるようにうまくデザインをしたのでしょう。G4やSuperDriveを考えれば普通の使い方にはパフォーマンスは十分です。今後のメインストリーム機になるのじゃないかと思います。iPhotoも使ってみました。なんか起動とかにえらく時間がかかるような気がしますけど、画像の拡大縮小はなかなか見事にスムーズにできます。今までだとサムネールを作っておいて…みたいなのが常識的だったかもしれませんが、Quartzを使えばそれもいらないということでしょうか。これは元画像をリアルタイムで拡大縮小しているような感じです。動作を見ていると、解像度が低い状態でいったんそのサイズでの画像を作り、少し時間が経過するときれいな縮小画像が出てくるみたいです。みかけはプログレッシブJPEGみたいな感じですが、これはそうしたプログラムを組んでいるのじゃないかと思います。拡大や縮小割合を変更している間は解像度が低い状態で画像の拡大を縮小しても、たぶん視覚にとっては気付かないのじゃないかと思います。縮小率の変更を止めた段階で、解像度の高い縮小画像を作っても、言われないと気付かないくらいなのかもしれません。フィルムロールなどなかなかうまく作られた機能です。個人的には今のところ、これで十分と思う仕様ですが、唯一の注文点はデータをサーバに置けないところでしょうか。もちろん、いちいちWeb公開してもいいのですけど、家族が異なるコンピュータを使っているうちではネットワークで共有する必要があるのです。その辺りはちょっと使い方を研究しないといけません。さっそく、ファイルがどう作られるのかを見たら、Picturesフォルダにフォルダを作って管理していました。だけど、いっぱいフォルダに区切られるので、ファイルのレベルでのアクセスはかえって大変そうです。残念ながら、AppleScriptには対応していません。
(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】アップルが新製品に関する発表会を開催、iPhotoや新型iMacをアピール

2002年1月8日、東京国際フォーラムにおいて、アップルコンピュータは記者発表を行った。もちろん、日本時間の未明に行われたMacworld Conference & ExpoでのスティーブジョブズCEOによる基調講演を受けての、発表内容に関する説明会である。その内容をお届けしよう。
まずは代表取締役の原田永幸氏よりの話から始まった。2001年には、iTunesの搭載やフラワーパワーなどのiMac、そして新しいiBookの発売、Power Mac G4にはSuperDrive搭載が行われ、PowerBook G4は新しいチタンの軽量ボディタイプを発表した。さらに、Mac OS XはVer.10.0、10.1とリリースして成功を収め、Final Cut Proなどアプリケーションも新しいバージョンが出された。デジタルハブソリューションの元年となり、販売政策としてApple Solution Expertsを構築してチャネルインフラの整備を行った。さらに直販部隊も作って富山県福光町などへの導入実績を作ってきた。ビックピーカンやヨドバシカメラの梅田店などの新しい販売拠点へのサポートも展開している。一方、売り上げは企業マーケットの低迷によりPower Macに影響はあったが、ノートブック製品は成功している。一方、3年間売れ続けているiMacも前年比で見ると落ち込みが見られるようになった。
2002年はMac OS Xをコアにしたデジタルハブソリューションを発展させる年だとした。新規ユーザの獲得を、新型iMacを軸に展開する。さらに、パワーユーザ向けの買い替えや買い増しの促進を図る。さらに、WinTelユーザをターゲットとして、Windowsプラットフォームのユーザに対してMacintoshを導入させるように働きかける。電子メールやOfficeがMacで利用できることを知らないユーザが多いとのことで、食い込む余地があると考えている。一方、プロマーケットの新規開拓をセグメントを定義して行う。Macworld Expo Tokyo 2002が3月に行われるが、東京ビッグサイトに場所を移して行われる。ブロードバンド対応として、単にEthernet対応ということだけではなく、AirMacやMac OS X、ギガビットなどの機能を統合してソリューションとして提案する。Mac OS X対応のアプリケーションも充実しており、2500の対応アプリケーションが1月中にも出そろうことが紹介された。
従来はMac OS 9.2が最初に起動されるが、本日より、Mac OS Xが最初に起動されるようになる。OSは両方搭載される。さらに、14.1インチのiBookが新たに発売される。デジタルカメラを利用するためのアプリケーションであるiPhotoも発表する。そして、第2世代のiMacとして液晶ディスプレイを搭載したモデルが登場した。大きな特徴はSuperDrive搭載である。日本でのデスクトップ機への要望は省スペースであり、新型iMacはそうしたニーズに応えることができるものである。

続いて、マーケティング本部長の大宮哲夫氏より新商品の説明が行われた。デジタルデバイスの特徴としては、パーソナルコンピュータといっしょに使うことが想定されている点であるとして、デバイスは大量に出荷されている。デジタルカメラはかなりの数が出荷されているのにも関わらず、有効なソリューションがなかった。そこにiPhotoというアプリケーションを投入する。デジタルカメラの市場は年間50%の成長をしているが、初期の頃と違って撮影結果をプリンタで印刷する場合、銀塩写真のプリントなみのクオリティが実現している。これまでのようなデジタルカメラだけの使い方は閉じた世界であると言える。たとえば、デジタルカメラだけでは写真にコメントを付けることもできない。また、プリントされた写真だと整理するのが大変なので2度と見られない写真がたまっているし、内容は記憶に頼る。こうした状況に変化を与えるのがiPhotoである。
続いてiPhotoの製品担当している梶原健司氏より製品のデモが行われた。iPhotoは写真を簡単に取り込んで整理、Webなどで他の人と共有することができるソフトだと概要を説明した。iPhotoを起動した状態で、実際にデジタルカメラをUSBケーブルで接続する。すると自動的に認識をするので、「読み込み」ボタンをクリックするとそれだけで取込みができる。また、ハードディスクに保存してある写真の取込みもできる。「整理」ボタンをクリックして整理ができる。スライドを動かすことで、サムネールからフルサイズまで任意のサイズでの一覧表示ができる。そしてタイトルを入力したり、キーワードを設定することもできる。さらにフィルムロールとして、取り込んだときのひとまとまりとしてソートするとういこともできる。
iTunesのプレイリストのようなアルバムという機能で、独自のフォトアルバムを作るということができる。そこに写真をドラッグ&ドロップで登録できる。さらに「編集」ボタンをクリックし、ドラッグしてトリミングするといったこともできる。あるいは白黒や回転もできる。さらに、オリジナルに戻すという機能もある。さらに縦横比をさまざまに選択して選択範囲の縦横比を一定にした選択ができる。たとえば、iDVD2向けの静止画像を作る場合に適している。さらに「ブック」という機能を使って、デザインされたレイアウトでの表示が可能となっており、コメントを付けて効果的に写真を表示する機能も用意されている。アルバムを作れば自動的にブックを作ることができる。ページのデザインとしてあらかじめ用意されているテンプレートを元に自動的にブックが作られる。さらに「共有」ボタンの機能は写真を他の人に見てもらう機能がある。印刷ではプリクラ風やあるいはグリーティングカード風にレイアウトをある程度指定してできる。さらに写真のスライドショーもでき、BGM付きで全画面を使ったスライド表示ができる。また、メールで送付するためにサイズを小さくしたり、Webページを構築することもできる。Webページは3クリックでできてしまう。iToolsに接続し、フレームを選んで、発行するとそれだけでWebで公開ができる。iPhotoは無料でダウンロードができる。Mac OS X 10.1.2対応となっている。

大宮氏からの話に戻り、総括が行われた。Mac OS Xがデジタルハブの中核となり、Quartzを使っているから画像サイズをリアルタイムでダイナミックに変更できる。Mac OS Xでは音楽はiTunes、写真はiPhotoを使うという点で使い勝手がいいとした。何でも同じブラウザで作業をするよりもより適したソリューションになると力説した。

続いて、iBook担当の福島哲氏からの新iBookの解説が行われた。新しいiBookは、14インチのモデルが登場し、Mac OS Xがデフォルトでのブートとなり、iPhotoを十分に使える環境であるという点が新しいところだ。Mac OS Xでは自動ネットワークとして複数のネットワークがアクティブになり、最良のネットワークを自動的に使える。その他、iBookの特徴についての説明がなされたが、バッテリ駆動時間の長さや、バックパックで携帯するのに耐えられる頑丈さなどを説明した。新しいiBookは1月12日より発売される。

続いて、iMac担当の柳原知明氏からのiMacの説明に移った。新しいデザインにはさまざまなニューアイデアが詰まっている。画面の周辺にマージンがあるのは、ディスプレイを動かすときに、表示面に手が振れないようにするための配慮である。TFT液晶はRGBを正確に反映するのでCRTやあるいはアナログを経由するディスプレイとの画質の違いを強調した。さらに指一本でディスプレの位置を力を入れずに自在に操作できる。本体には電源も含めてすべて入っている。そして、SuperDrive搭載が大きな特徴である。1年前に新しく登場したものであるが、当時は50万円したシステムでプロ向けであったマシンでないと使えなかった。しかしながら、コンシューマモデルでも利用できるようになった。コネクタとしては、Apple Pro Speaker対応のミニジャックがある。また、USBは3ポート用意されている。また、ミニVGAポートでミラーリングでの表示ができるが、変換アダプタは別売である。なお、リセットボタンやプログラマボタンはなくなり、電源ボタンに集約された。たとえば、リセットは電源ボタンを5秒以上押すといった操作となっている。新たにファンはついたが、静かなファンである。1m離れると25dbくらいとなる。底面はステンレス製のアクセスカバーとなっており、ネジをはずせばAirMacとメモリのスロットがある。ネジはアクセスカバーについたままになるので、なくしてしまうこともない。Apple Pro Mouse、Apple Pro Keyboardは白いデザインとなっている。そして、PowerPC G4を搭載し、Power Mac並の700/800MHzのクロックとなっている。DVDのエンコードはPentium 4機との比較で倍近い早いといったベンチマークテスト結果を紹介した。ビデオチップにはGeForce 2 MXを搭載しており高速なグラフィックス処理が可能となっている。iMovieが高速に動作することや、iDVDでディスクを作製することなどを紹介した。そして価格や発売時期などが紹介された。

続いてQ&Aタイムとなった。iPhotoのネットワーク印刷サービスは日本語版ではサポートされていないようだがどうなっているのかという問いに対しては、日本では印刷サービスはまだ案内できる段階ではないので、改めて案内をすると原田社長より回答があった。

カテゴリ:デジタルカメラ, iMac, Macintosh本体


WebObjects 5.1がリリース、EJBやServlet、JSPにさまざまな形で対応

WebObjectsのアップデート版Ver.5.1がリリースされた。従来の機能に加えて、EJBに対応し、JSPやServletへの対応を行っている。実行環境でのEJB対応に加え、Enterprise Beanの構築やEJBを使ったアプリケーションの構築を、Project Builderのレベルでサポートしており、テンプレートが用意されている模様だ。また、WebObjectsアプリケーションを、JSPやServletとして構築することも可能となっている。これらはアプリケーションの実行形態として、JSPやServletでの稼働を行うといったものであり、WebObjectsのコンポーネントを、ServletやJSPから利用できるようになっている。やはりProject BuilderやWebObject Builder等でのサポートがなされており、TomcatやWebLogicをベースにした稼働環境でのアプリケーション作成にWebObjectsが対応したことになる。
WebObjectsは、EOFをベースにした独自のデータベースアクセス機能をもとにしてきた開発環境だ。そのため、機能的にはそん色はないとは言うものの、世の中のアプリケーションサーバーはEJBであることが当たり前となっていることもあって、WebObjectsはアプリケーションサーバーとはみなされない場合もあった。そうした状況を打破するために、EJB、Servlet、JSPといった現在のアプリケーションサーバの標準に一気に対応したことになる。もちろん、これらはJavaがベースになっているので、開発できるという点では特に目新しいことはないとも言えるだろう。しかしながら、WebObjectsの特徴を生かすということと、EJBなどの標準仕様を満たすということを、Appleの開発ツール内で実現するという方向性が垣間みられる。また、デプロイメントでのEJB対応や、TomcatやWebLogicといった別のアプリケーションサーバで適用できるという点では、稼働環境での変化ということも注目できるだろう。
WebObjectsでの開発はあちこちで行われてるとは言え、いろいろな理由でDirect to Javaなどあまり使われていないフレームワークもある。現在のWebObjects開発者は、もちろん必要があれば別だが、あえてEJBなどのフレームワークを使うかどうかは未知数だろう。その意味では、EJBやServletはこれまでは別のアプリケーションサーバを使っている開発者を引き付ける魅力になるかどうかが1つのポイントだ。一方、WebObjectsを得意とする開発者にとって、新しく加わったEJBやServlet、JSPといった機能を開発しているプロジェクトにどいういう形で取り込むのかが適しているかといったことはまずは技術的な意味での研究が必要だろう。加えてEJB等の対応によって、WebObjects開発者にとってのビジネスチャンスが広がることも考えられるだろうが、どんなところを顧客に見せて、どういう形でメリットを示せるかといった営業ノウハウ的な面も研究は必要だと思われる。EJBなどの新機能を開発者にとっての武器となるのがどんなパターンなのかといった点は注意深くチェックしておくべきことだろう。

なお、WebObjects 5.1は従来とおり$699で販売され、ADC(Apple Developer Connect)会員に対しては$349での開発版の販売も行われる。既存のユーザはフリーアップデートが可能だが、ダウンロード販売は行われないようで、$19.95の実費によりアップデートCD-ROMを入手することでアップデートができるようになっている。ただし、日本でのアップデート方法などについてはアナウンスはまだない。

以下に関連するドキュメントへのリンクをまとめておく。

◇WebObjects 5.1 Release Notes
 http://developer.apple.com/techpubs/webobjects/ReleaseNotes/ReleaseNotes.html

◇WebObjects Desktop Applications
 http://developer.apple.com/techpubs/webobjects/DesktopApplications/WODesktopApplications.pdf

◇Developing EJB Applications
 http://developer.apple.com/techpubs/webobjects/EJB/developingejb.pdf

◇Developing Applications using Java Server Pages and Servlets
 http://developer.apple.com/techpubs/webobjects/JSPServlets/index.html
 http://developer.apple.com/techpubs/webobjects/JSPServlets/JSP_and_Servlets.pdf

◇Post-Installation Guide
 http://developer.apple.com/techpubs/webobjects/PostInstall/PostInstall.pdf

カテゴリ:Java, WebObjects, 開発ツールその他


REALbasic 4が正式にリリース、リストやテキストのコントロールの一新などを行う

Real Softwareは、開発ツールのREALbasicの新バージョンVer.4を正式にリリースした。アルファ版、ベータ版が公開されていたが、2002年1月は正式発売として予告されていた。リストボックスやテキストエディットといったコントロールが一新されたり、RbScriptのPowerPCでのコンパイルができるようになるなどの変更点があるが、大きな修正や機能追加は見られない。細かな修正ポイントは以下のページからのリンクしたページ「What’s new in REALbasic 4?」で紹介されている。なお、バージョンは4.0.1となっている。
REALbasicは、ウインドウにコントロールを配置して画面設計を行い、処理プログラムをBasic言語で記述するタイプの開発ツールだ。Carbon対応しており、Mac OS Xネイティブなアプリケーションや、あるいはWindowsアプリケーションの生成が行える。また、データベースアクセスも可能なので、業務アプリケーションを構築することにも利用されている。Standard Editionが$149.95、Professional Editionが$349.95となっているが、Ver.3.5からのアップデートも受け付ける。Mac OS Xのリリース前あたりから、バージョンアップを頻繁にしかも一定期間ごとに行う体勢となっており、OSの変化に素早く追随できるようにしてきた。日本語版のREALbasicについては、執筆時点ではアナウンスはない。

関連リンク:REALbasic 4
カテゴリ:開発ツール, REALbasic


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(14)Cocoaでのファイル情報-1

CocoaのDocument-based Application、すなわち文書ファイルを含むアプリケーションを作る機能を使ったエディタ制作の続きである。正月後に保存したファイルにファイルタイプとクリエイタをつけるというテーマに実は取り組んでいたのである(ちょっとだけはまりながら…)。
Project Builderの「アプリケーション設定」での「書類のタイプ」では、ファイルタイプも記述できたし、ファイルのクリエイタも設定できた。しかしながら、Cocoaのフレームワークでの文書ファイル保存の処理には、ファイルタイプとクリエイタの設定は行われなかったのである。その部分は、プログラマが自分で作らないといけないのである。そのために、文書ファイルを管理するクラスのもとになっているNSDocumentクラスの特定のメソッドをオーバーライドしないといけないのであるが、それについては、次回に説明し、ここでは、Cocoa-Java特有のファイル処理について解説しておきたい。つまり、ファイル処理に必要なメソッドをまずはまとめておきたいのである。

Objective-Cでのプログラミングでは、Cocoaに用意されたクラスを使ってファイルの処理を行う。一方Javaの場合は、Javaの標準ライブラリであるjava.io.*あたりに定義されているFileやFileInputStreamあたりを使ってのファイル処理ができる。それに加えて、Cocoa-Java特有のファイル処理クラスがあったり、さらにはNSDataのようにファイル書き込み機能があるなど、いろいろなクラスにファイル関連処理機能がある。いずれにしても、java.io.*は基本として押さえておく必要があるが、これはJava Watch on the Xのコーナーでいずれとりあげるつもりである。さらに、Cocoa-JavaアプリケーションではCocoa特有のファイル処理を知っておく必要もでてくるので、そのつもりでドキュメントを見ておくべきだろう。
ここで、Java標準ライブラリでは、Fileクラスによってファイルを参照するが、Cocoaはパスの文字列を利用してファイルを特定する。パスはもちろんBSDでのパスであるので、Finderで見える階層のものではない。もちろん、FileクラスのgetPathメソッドでパスは得られるし。パスの文字列を引数にしたFileクラスのコンストラクタを呼び出すと、パスからFileクラスの生成もできるので相互利用は比較的容易である。Cocoa特有のファイル処理については以下の文書を参照してもらいたいがまだ文書は全部できていないようだ。Objective-CとJavaで用意されているクラスがまったく違うところに注意をしてもらいたい。Objective-CではNSFileManagerというクラスをよく使うのであるが、それに相当するJavaのクラスがないのである。

◇Cocoa Programming Topic: Low-level File Management
 http://devworld.apple.com/techpubs/macosx/Cocoa/TasksAndConcepts/ProgrammingTopics/LowLevelFileMgmt/index.html

Cocoa-Java特有のファイル処理機能はたくさんあるが、ここではファイルタイプとクリエイタに絞って機能を紹介しよう。
実は、最初はMRJにあるFileUtilsクラスのクラスメソッドであるsetFileTypeAndCreatorを使えばいいと思ったのであるが、なぜか、

2002-01-05 20:34:32.277 MOSAEditor[6251] *** _NSAutoreleaseNoPool(): Object 0x3658210 of class NSView autoreleased with no pool in place - just leaking

といったメモリのエラーがでてしまう。おそらくCocoa-Javaのクラスをインスタンス化したときには、オートリリースが設定されたメモリブロックとして確保するのだと思われるが、MRJの利用でそのオートリリースプールが壊されるのだと想像される。ただ、必ずダメというわけでもなく、あるとき作ったプログラムではCocoa-JavaなのにMRJのクラスを呼び出して利用できたりもしたことがある。ちょっと謎なのだが、いずれにしても、ファイルタイプやクリエイタをはじめ、ファイルの様々な情報を取り出すための機能がCocoa-Javaに用意されているので、それを利用するのが問題は少ないだろう。
(この項、続く)

カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(14)Cocoaでのファイル情報-2

NSPathUtilitiesに次のような機能がある。ちなみにNSPathUtilitiesクラスは、パスを扱う場合に便利なメソッドがいろいろあるので、Cocoa-Javaでのファイル処理では有用に使えることも多いだろう。

☆指定したファイルにファイル情報を設定する(Static)
 boolean NSPathUtilities.setFileAttributes( String path, NSDictionary attributes);
 戻り値:設定できればtrue、失敗すればfalse
 引数:path:設定を行うファイルのパス
    attributes:ファイル属性をNSDictionaryクラスで指定する

☆指定したファイルの情報を取得する(Static)
 NSDictionary NSPathUtilities.fileAttributes( String path, boolean flag);
 戻り値:ファイル情報が含まれたNSDictionaryクラスのインスタンス
     (ファイルが存在しない場合、戻り値がnullとなる)
 引数:path:情報を得たいファイルのパスを指定する
    flag:pathで指定したファイルがシンボリックリンクの場合、flagがtrue
       ならリンク先のファイルの情報を得る。falseなら、シンボリックリ
       ンクファイル自体の情報を得る

ここでファイルの属性は、NSDictionayクラスで管理される(このクラスは記事の末尾で説明する)。キーワードと情報についての対応は次の表のようになっている。データのクラスのIntegerやBooleanはjava.langパッケージにあるものだ。

◇属性データのNSDictionaryのキーとデータ
setFileAttributesメソッドで設定できる属性
↓ fileAttributesメソッドで取得できる属性
↓ ↓ キーワード(データのクラス)データの内容
↓ ↓ ―――――――――――――――――――――――――――
× ○ FileSize(Integer)ファイルのサイズのバイト数
○ ○ FileModificationDate(NSDate)ファイルの修正日
× ○ FileOwnerAccountName(String)ファイルのオーナー
× ○ FileGroupOwnerAccountName(string)ファイルのグループ
× ○ FileReferenceCount(Integer)ハードリファレンスの個数
× ○ FileIdentifier(Integer)ファイルID
× ○ FileDeviceIdentifier(Integer)ファイルデバイスのID
○ ○ FilePosixPermissions(Integer)アクセス権
× ○ FileType(String)ファイルの種類(別表参照)
○ ○ FileExtensionHidden(Integer)0なら拡張子を非表示、1なら表示
○ ○ FileHFSCreatorCode(Integer)クリエイタ(未設定なら0)
○ ○ FileHFSTypeCode(Integer)ファイルタイプ(未設定なら0)

◇ファイル情報でキー「FileType」に対応するデータとして取り得る文字列
 FileTypeDirectory
 FileTypeRegular
 FileTypeSymbolicLink
 FileTypeSocket
 FileTypeCharacterSpecial
 FileTypeBlockSpecial
 FileTypeUnknown

setFileAttributesメソッドでは当然ながら設定可能な情報は限られているけど、さらに、実際に設定できるのは、実行しているプロセスのアカウントと同じオーナーのものに限られる。あるいはルート権限で実行しているプロセスからの変更となる。自分で保存したファイルについては通常はファイルの情報を変更できるはずだ。setFileAttributesメソッドではすべての属性を設定する必要はなく、設定をしたい属性だけ、NSDictionayのキーとして設定すればいい。具体的には次回にプログラムを紹介しよう。
なお、ドキュメントでは整数で得られるデータはintegerと記載があるが、実際には、java.lang.Integerというintのラッパークラスとなっている。拡張子を隠しているかどうかはFileExtensionHiddenというキーで得られるはずとなっていてドキュメントではクラスについてはbooleanとなっているが実際にはjava.lang.Integerである。

さて、ファイルタイプやクリエイタは、Integerクラスである(つまりはint型)。C言語だと、‘TEXT’と書けばlong型が得られたのでいいのであるが、Javaではこの書き方ができない。そこで、テキストで記述した4バイトのコードを整数にしたり、あるいは逆を行う必要がある。そのために用意されたのが、NSHFSFileTypesクラスのメソッドである。

☆4バイトの文字列から対応する整数値を得る(Static)
 int NSHFSFileTypes.hfsTypeCodeFromFileType(String fileType);
 戻り値:タイプやクリエイタに対応した整数値
 引数:fileType:ファイルタイプやクリエイタを示す文字列(以下の本文を参照)

☆整数値から4バイトのコードを得る(Static)
 String NSHFSFileTypes.fileTypeForHFSTypeCode(int typeCode);
 戻り値:ファイルタイプやクリエイタを示す文字列(以下の本文を参照)
 引数:typeCode:タイプやクリエイタに対応した整数値

☆指定したファイルのファイルタイプを取得する(Static)
 String NSHFSFileTypes.hfsTypeOfFile(String filePath);
 戻り値:ファイルタイプを示す文字列(以下の本文を参照、未設定なら‘’のみ)
 引数:filePath:調べたいファイルのパスを文字列で指定する

ここで、ファイルタイプをTEXTにしたいのなら、そのTEXTに対応した整数値を得るために、4バイトのコードの前後にシングルクォーテーションを付けた文字列を指定する必要がある。つまり、

int theCode = NSHFSFileTypes.hfsTypeCodeFromFileType("‘TEXT’");

とするのである(実際にはシングルクォーテーションは半角)。また、fileTypeForHFSTypeCodeやhfsTypeOfFileで得られる文字列も前後にシングルクォーテーションがついているので、結果的に得られる文字列は6バイトということになる。

いずれにしても、具体的なプログラムを示さないと、まったく初めてこれらのクラスに遭遇した場合には理解しづらいだろう。NSDictionaryクラスのことを説明した後に、実際のプログラムを紹介しよう。
(この項、続く)

カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(補足)NSDictionaryクラス

NSDictionaryクラスは、immutableつまりいったん作成すると内容が変更されないことが保証されたクラスで、特定のキーに対応するデータを管理することができるクラスだ。java.util.Properties(ないしはHashTable、Dictionary)や、あるいはPerlでの連想配列と同じようなものであるが、それのCocoa版である。データを複数記憶できる、個数は可変である。それらのデータを取り出すのに、キーというデータを指定する。あるデータにキーが割りあっててあってキーを手がかりに取り出すということができる。また、キーやデータをまとめて取り出すという機能がある。コンストラクタは次のように定義されている。4つあるが、immutableなので、引数無しで空のNSDictionaryを作ることは実用上はまずないだろう。4つ目は事実上のNSDictionaryクラスのコピー処理を行うことになる。データを記録させるには、2つ目ないしは3つ目を使うことになる。なお、キーとデータのペアを後から追加することはできないので、コンストラクタで生成時に、データを詰め込んでしまわないといけない。

☆NSDictionaryクラスのインスタンスを生成する(コンストラクタ)
 new NSDictionary();
 new NSDictionary( Object[] objects, Object[] keys);
 new NSDictionary( Object anObject, Object aKey);
 new NSDictionary(NSDictionary otherDictionary);
 戻り値:生成したNSDictionaryクラスのインスタンスへの参照
 引数:objects:データ
    key:データに対応するキー
    otherDictionary:これと同じ内容のNSDictionaryを生成する。

キーとデータはいずれにしても配列で指定する。Object型だから、つまりはJavaのクラスであれば何でもいいということになる。一方、基本型の配列はそのままでは設定できないということになるだろう。たとえば、yearというキーに「2002」、monthというキーに「1」、dayというキーに「8」というデータを割り当てるとすると、例えば次のようなプログラムとなる。整数データは、java.lang.Integerクラスを使えばいいだろう。データとキーをそれぞれ配列にするので、対応がきちんとなるように順序に気をつけて配列を作ればよく。

String keys[] = {"year", "month", "day"};
Integer data[] = {new Integer(2002), new Integer(1), new Integer(8)};
NSDictionary dict = new NSDictionary(data, keys);

NSDictionaryにあるメソッドのうち、よく利用するものを以下にまとめておく。他にもあるが、一般にはここで紹介したものを使うのが一般的だろう。

☆キーとデータのペアの個数を求める
 int 〈NSDictionary〉.count();
 戻り値:データの個数

☆キーに対するデータを求める
 Object 〈NSDictionary〉.objectForKey(Object akey);
 戻り値:データ(存在しないキーの場合はnullとなる)
 引数:key:キー

☆すべてのキーをEnumerationクラスで得る
 java.util.Enumeration 〈NSDictionary〉.keyEnumerator();
 戻り値:キーのリスト

たとえば、以下のようなプログラムで、変数pathで指定したファイルのファイル情報を、標準出力にキーとデータのペアとして書き出す。

import java.util.*;
   :
String path = "/Users/msyk/text.txt";
NSDictionary dic = NSPathUtilities.fileAttributes( path, false);
Enumeration enum = dic.keyEnumerator();

while (enum.hasMoreElements()) {
Object key = enum.nextElement();
Object obj = dic.objectForKey(key);
System.out.println("key="+key.toString()+", data="+obj.toString());
}

(この項、続く)

カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング