いまさらながら、XCode 3.0に移行してみた。
Interface Builderがかなり所作が変わっていて、結構戸惑ったので書きのこしておこう。
以前はInterface Builder上のインスペクタでClassを作成して、Instance化して、GUIパーツとOutletやActionをドラッグで結ぶというやり方だった。今回の変更でインスペクタ上でClassとかInstanceとかが無くなっていたので一瞬呆然としてしまった。今までと全く異なる右のようなインターフェイスになってしまったからだ。
例えば、いままで通りMVCのControllerにあたるクラスを作りたい時、正解はインスペクタからCocoaのObject & Controllersの中からObjectをドラッグしてきて右のように置く。そしてId Inspectorを開いて、Class ActionsとClass Outletsに必要なものを追加していく。今回はよくCocoaの入門本にあるようにAppContollerという名前で作ってみた。
Action/Outletの関連付けも以前と作法が違っている。AppContollerを選択してContol + クリックすると右のようなパネルが開かれる。Outlet/Actionの右の○をクリックしてドラッグすると青い線が伸びていくので、それを該当のパーツに繋げると関連付けができる。
次に、Interface BuilderのFileメニューからWrite with Classを選んでクラスファイルを生成してしまう。このとき、自動的にプロジェクトに追加されても良さそうなものだがデフォルトでは追加されないようだ(やり方がマズいのか?)。 プロジェクトで、Classesのグループ上でControl + クリックで「追加」を選び、「既存のファイルの追加」を行なう。
次にクラスファイルのヘッダーファイルを開くと、今までのやり方と違いこの手順では親クラスが特定できていないので生成されたコードは以下のように「親クラスを特定せい!」というコメントが入って親クラスが指定されていない。ここでコメントを消してNSObjectを親クラスに明示的に指定してあげる。
実装のほう(ApplContoller.m)を見てみると、Implementationの部分もメソッドまで空で生成されている。あとは、そこにコードを埋めていけばよい。例えば、ボタンを押したら"Hello World"を表示みたいなコードなら
[textFiled setStringValue:@"Hello World!"];
などと。
上記のやり方では、プロジェクトへの登録と生成したクラスの親クラスの指定が以前はInterface Builderで出来ていたのが、手作業で別に手間を掛けなければならなくなってしまった。何か別の方法があるのかな。
コメント
コメントを投稿