Macintosh Developer Online (MDOnline)


2000年12月20日発行号 - 火曜の夜は夜更かしだ!



“アップル・JAPAN”が\450…というと何のことと思われるでしょうか? とうとう株価がそこまで下がったとか(笑)。いやいや、実は、先日、大宮に飲みに行った先のお店で売っていたカクテルです。日本酒のカクテルのリストに見つけて飲んでみました。予想通りと言うか、日本酒をりんごジュースで割ったもので、氷を浮かべてあるのです。だけども日本酒をジュースで割ると全然お酒の味がしないもので、まあ、病みつきになるという雰囲気のものでもありませんでしたけどね。ただ、6人集まったのは奥さん同士が某幕張に本部のある大学のサークル仲間なんですが、そのうち4人が「アップル・JAPAN」という名前に反応したという次第で(笑)、まだまだマックのシェアも高いぞという話もありますが、単に面子の偏りが激しかっただけかもしれません。めざとくメニューにある誤植も見つけました。日本酒カクテルが全部\450というつもりなんでしょうけど「aii \450」と書いてあって、それも大笑いしてしまいました。なんだかんだで酒浸りの世紀末をおすごしいますが、同じような方も多いでしょうね。
(新居雅行 msyk@mdonline.jp


21世紀最初のMacworldのキーノートはストリーミング放送で

2001年1月に、Macworld Expoがサンフランシスコで行なわれる。恒例の、Apple社iCEOのスティーブジョブズ氏によるキーノートは、Webによるストリーミング放送がなされる。時間は現地時間の2001年1月9日の午前9時からなので、日本時間では2001年1月10日(水)の午前2時となる。もちろん、QuickTime Playerを用いてみることができる。新しいPowerBookが登場するのか、それとも、Mac OS Xの正式発売日が発表されるのか? その真実をリアルタイムで確かめることができるだろう。

関連リンク:Macworld SF/2001 Keynote
カテゴリ:イベント


【今から始めるCocoaプログラミング】最初のアプリケーション(5)コンポーネントを探る

前回までにInterface Builderで作成したコンポーネントが、Javaで記述されたクラスの中に宣言された1つのインスタンス変数から参照できるようになっていることを説明した。Interface Builderでcontrolキーを押しながらドラッグして、インスタンス化したクラスからテキストフィールドを結び、Outletと結び付ける。そうすると、Javaのプログラムのそのクラス内では、Outletと対応したインスタンス変数が、テキストフィールドを参照するのである。テキストフィールドは、NSTextFieldというクラスだが、このクラスの使い方がどうなっているかをまずはチェックしてみよう。
クラスの使い方のドキュメントは、Developer ToolsをインストールしたMac OS Xにすでにインストールされている。ドキュメントは、/Developer/Documentation/Cocoa/cocoa.htmlというファイルをとにかくダブルクリックして開けばよい。

◇Cocoaのドキュメントが存在するフォルダ
 

このページは、AppleのWebサイトにあるのと同じもので、さらに、Appkitに関するHTMLのリンクをクリックする。もちろん、Java Frameworksの方を選ぶ。すると、クラスの一覧表がある。もちろん、ここで、NSTextFieldを参照してみよう。文字色や背景色などの設定を変更するメソッドの紹介はあるが、データの取り出しなどのメソッドが見つからない。その場合は、NSTextFieldの親クラスを見てみる。NSControlがそれだが、そこを見ると、データの基本的な設定のためのメソッドが見える。このメソッドは各種のコントロールに共通なもので、きっといちばんよく使うのだろう。データの型ごとにメソッドが用意されている。以下表にまとめておくが、この部分は等幅フォントで御覧いただきたい

データの型 値を設定 値を取り出す
---------------------------------------------
double setDoubleValue(x) doubleValue()
float setFloatValue(x) floatValue()
int setIntValue(x) intValue()
Object setObjectValue(x) objectValue()
String setStringValue(x) stringValue()

基本的な数値型として3種類、そして文字とオブジェクトとしてデータを出し入れできるということだ。setで始まるメソッドは、引数を取るがその型は表での「データ型」を指定する。戻り値はなくvoidだ。値を取り出すメソッドは、そのコントロールの値をデータ型で記した型で戻す。

それでは、ここで、「ボタンをクリックしたら、テキストフィールドに何か決まった文字列を代入する」という処理を組み込んでみたい。テキストフィールドは、TextField1というインスタンス変数が参照している。それに対して、setStringValueメソッドを適用すればいいわけだ。Java的に考えると思わず次のようなプログラムは思い浮かぶ。

TextField1.setStringValue("Oh My God!");

だが、これはエラーが出る。確かにTextField1はNSTextField型なのだが、プログラム上はObject型であり、setStringValueというメソッドは定義していない。従ってキャストが必要になり、次のようなプログラムになる。このステートメントを、ボタンをクリックしたときに呼び出されるメソッド、clickButtonに記述する。

((NSTextField)TextField1).setStringValue("Oh My God!");

◇クリックしたらテキストフィールドに文字を入れるプログラムを追加した
 

キャストがあるとちょっと回りくどい感じがしてしまうけど、それは仕方ない(もっとも、Objective-Cだとスマートなんだがと思われる方もいらっしゃるだろう)。もちろん、コンパイルして実行し、表示されるウインドウでボタンをクリックすると、プログラム中に埋め込んだ文字がテキストフィールドに入れられるのが分かるはずだ。図は示さないので、実際にやってもらいたい。

さて、ウインドウに配置したテキストフィールドの残り2つはそのままにしてしまっている。Interface Builderで、それらに対してもインスタンス化したMyWindowControllerのOutletと結合の設定を行なっておこう。MyDocument.nibのウインドウでClassesのタブを選択しておき、インスタンス化したMyWindowControllerのボックスからテキストフィールドに向かってcontrolキーを押しながらドラッグして、インスペクタで結合設定を行なう。

◇OutletのTextField2と2つ目のテキストフィールドを結合する
 
◇OutletのTextField3と3つ目のテキストフィールドを結合する
 

さらに、Project Builder側で、MyWindowController.javaのファイルをさらに編集する。クリックして実行されるclickButton1メソッドの内容を次の図ように書き込む。要は1つ目のテキストフィールドの値と、2つ目のテキストフィールドの値をdouble型の値として取り出し、そのかけ算結果を3つ目のテキストフィールドに設定するというものだ。つまり、「かけ算パネル」のようなウインドウになるという具合だ。

◇clickButton1メソッドに処理を書き込む
 

プログラムを見やすくするために、まずはインスタンス変数のTextField1を、目的とするNSTextField型の変数tField1に代入している。その他のインスタンス変数についても同様に処理をしている。これも回りくどいといえばそれまでだが、ソースを見やすくするには、こうした書き方の工夫も1つの方法だと言えるだろう。

プログラムを実行させて、上から2つのテキストフィールドに数字を入れてボタンをクリックしてみよう。3つ目のテキストフィールドにかけ算した結果が表示される。

◇プログラムの実行結果
 

ここまで来れば、電卓をプログラムすることくらいはできるのじゃないかと思うがいかがだろうか。電卓はありがちなテーマであるが、以上の知識で概ね作れる範囲ではないかと思う。答え合わせはしないけど、宿題と思ってとりかかってくれてはどうだろうか。

5回に渡って続けてきた『最初のアプリケーション』の一連のセッションは以上で終了だ。研究が進んだら【今から始めるCocoaプログラミング】シリーズの次のセッションをお届けしよう。

カテゴリ:Cocoa, 今から始めるCocoaプログラミング


Mac OS Xのルートにあるフォルダと同じ名前をパーティション名には使わない

Tech Info Libraryに、Mac OS X Public Betaで、ディスクのパーティション名に、起動ボリュームのルートにあるフォルダと同じ名前を付けていると問題が生じることが掲載されている。たとえば、ルートにはApplications、Library、Mac OS 9、Systemといったフォルダがあるが、これらと同じ名前のパーティションが別にあると、ルートにあるフォルダ自体を参照できなくなる。そのため、パーティションはルートにあるフォルダ名とは異なる名前にしておく必要がある。

関連リンク:Mac OS X Public Beta: Partition Naming Issue
カテゴリ:Knowledge Base(旧TIL), Mac OS X


REALbasicの次期版のリリース15が公開、印刷機能の改良やバグ修正など

開発ツールREALbasicのCarbon対応次期バージョンVer.3.0のアルファ版が公開されているがリリース15が登場している。今回のリリースでは、印刷の機能が強化され、72dpiよりも高い解像度での印刷設定ができるようになっている。また、プロジェクトの既定のひな形を作っておくことができるようになった。さらに、検索処理が外部のファイルに対しても行えるようになった。さらにツールバーのみかけも変更されている。バグ修正も行なわれているが、PostgreSQLの時間データのフィールドに対応して、時刻データの入力動作が正しく行なわれるように改良されている。REALbasic 3.0は、Carbon対応の開発ツールとなると同時に、Carbon対応のアプリケーションの生成もできるようになるバージョンだ。

関連リンク:REALbasic 3.0a15
カテゴリ:REALbasic


AppleShare IP 6.3.1のMac OS 9.0.4に対する適合度を高めるアップデータ

英語版の「AppleShare IP 9.0.4 Update」がAppleより配付されている。Mac OS 9.0.4で稼動しているAppleShare IP 6.3.1とMacintosh Manager 1.3の動作性能を向上させるとなっているが、それ以上の詳しい修正内容は明らかではない。なお、AppleShare IPはセキュリティの問題などを修正している6.3.2がリリースされている。また、6.3.1はもとからMac OS 9.0.4対応となっていた。日本語版のAppleShare IP利用者は、日本語版のアップデートソフトが出るのを待つのがよいだろう。

関連リンク:AppleShare IP 9.0.4 Update 1.0
カテゴリ:サーバー製品