たのしいCocoaプログラミング [Leopard対応版]
正誤表
このページは、『たのしいCocoaプログラミング[Leopard対応版]』の正誤表っす。出すときに結構慌ただしかったら、たしかに誤植もあった。すんません。ここで訂正します。
[Leopard対応版]は、前の版からの改訂版なんだよね。書き直したところは、もちろん目を皿にしてチェックした。だけど、その影響が思いもよらないページに及んでいる事もあるんだよね。どこかのページで、「・・・に関しては、xxxページを参照してくれ。」って自信満々に書いているのに、実際見に行ったら改訂でそこの記述無くなっちゃったよー、ってのがあった。その辺の訂正もします。
さらに、基本的には問題ないんだけど、もっと丁寧に説明した方がいいのかも、というところも取り上げている。というのは、本を出した後に何件か質問のメールをもらったんだよね。別に本の記述が間違ってるわけじゃないんだけど、そっか、こういうとこでつまずいちゃうこともあるよなぁ、って気づかされる事があった。たのココは、初心者向けです、って謳っているんだから、この辺も出来る限りフォローしたい。
この正誤表の内容は、特に記述がなければ、初版第1刷のためのものになる。これ以降の版では、ここに書いた内容が反映されていることもあるので、よろしく。
メールやコメント欄などで問題を指摘してくれた方々、ありがとうございました。
Lesson 5 チュートリアル:Hello World!
5-2 開発の手順
p71
誤「クラスのためのソースコードを囲う。」
正「クラスのためのソースコードを書こう。」
これは、単純に誤植です。すんませんでした。
5-4-2 クラスの宣言
p75
ここでは、AppController.hの編集のための手順を紹介している。だけど、手順の最後に、「ファイルを保存する」って書くのを忘れてしまったんだよね。ここで保存しないと、後のステップに影響が出てしまう。だから、手順に次の内容を追加して欲しい。
ソースコードの後に、次の手順を追加。
編集が終わったら、[ファイル]→[保存]メニューで保存しよう。
保存しないと5-5で問題が出るんだよね。その内容も説明しておく。
5-4-2の最後に、次の文章を追加。
手順の最後でファイルを保存しているけど、実はこれ、すごく大事なことだ。ここで保存しておかないと、この編集内容がInterface Builderに伝わらず、次のステップでつまずくことがある。忘れずに保存しておいて欲しい。
5-5-1 xibファイル
p76
Xcode 3.0およびInterface Builder 3.0以降では、Interface Builderのファイルの保存形式として、xibファイルを使うようにするっていう流れがある。前まではnibファイルだったんだよね。xibとnibは、内容は基本的に同じ。
ということで、たのココLeopardでは、xibファイルを使うという前提で書いているんだ。だけど、nibからxibへの移行期なので、開発環境のバージョンによって細かいバラツキが出ている。その影響が出てくるのが、テンプレートからのプロジェクト作成。Interface Builderの作業ファイルとして、MainMenu.xibを使っているものもあれば、MainMenu.nibになっているものもある。
どっちでも問題ない。同じように作業出来る。でも、初めての人が混乱するといけないので、記述を加えておく。
step5の直前に、以下を追加。
もしかすると、ここでMainMenu.xibが見つからず、その代わりにMainMenu.nibというファイルがあるかもしれない。これは、開発環境のバージョンによるんだ。MainMenu.nibでも、.xibファイルと同じように作業を進めることが出来るから、適時置き換えながら読み進めて欲しい。
5-6-1 クラスのインスタンス化
p81
xibファイルに、ライブラリからNSObjectをドラッグしてインスタンス化する。でもこのとき、もしかしたら追加出来ないときがあるかもしれない。そのとき、「鍵」のアイコンが一瞬表示されるかもしれない。
これは、そのxibファイルがロックされているんだ。ロックを解除すれば、追加出来るようになる。そのことも追記しておこう。
step7の画像の後に、以下を追加。
ドラッグして追加しようとしたとき、鍵のアイコンが表示されて追加出来ない、ということが起こるときがある。これは、xibファイルがロックされているときに起こるんだ。こういうときは、ロックを解除してやろう。それには、xibウインドウのツールバーにある、「Info」ボタンを押す。小文字のiが描いてあるボタンね。そうすると、xibウインドウの情報画面が出るんだけど、そこに「Document Locking」っていうポップアップメニューがある。ここから、「Nothing」を選択しよう。これで、ロックが解除されるよ。
5-7-1 アウトレットとアクションの接続
p85
アウトレットとアクションの接続は、Interface Builderの最大の見せ場。Interface Builder 3.0では、これがさらに洗練されてきた。
でも、この接続がうまくいかない、っていう声をたまに聞く。接続しようとしても、何も出てこないって。原因は、XcodeでのAppController.hの編集がうまくいっていないこと。ソースコードをよくみて確認して欲しい。そしてありがちなのが、編集した後保存するのを忘れちゃうこと。保存しないと、編集内容がInterface Builderに伝わらないんだよね。そこを確認して欲しい。
step8の直後に、以下を追加。
うまくつながった?もしつながらなかったら、AppControllerにきちんとアウトレットとアクションが備わっているのか、確認して欲しい。確認には、さっき説明した接続状況確認ウインドウを使って欲しい。もし、ここにtextFieldというアウトレット、sayHello:というアクションが表示されていなければ、AppControllerクラスの宣言に問題があるということになる。Xcodeに戻って、AppController.hを確認して欲しい。そして忘れちゃいけないのが、AppController.hをきちんと保存しておくこと。保存しないと、Interface Builderに編集内容が伝わらないよ。
Lesson 8 チュートリアル:文法の実験のためのプロジェクト
8-3-2 クラスファイルの作成
p111
ここの説明で、Lesson 5での内容について触れている。でもその内容って、改訂するときに変わっちゃったんだよ。つじつまが合わなくなっているー。というわけで、こんな風に変えます。
誤「 Lesson 5ではAppControllerっていうクラスを作ったけど、そのクラスのためのファイルはInterface Builderで作ったよね。AppController.hとAppController.mというファイルだ。
今度は、Xcodeを使って、新しいクラスのためのファイルを作ってみよう。」
正「 Lesson 5でAppControllerっていうクラスを作ったけど、それと同じ手順になるよ。」
Lesson 10 Objective-Cの文法
10-1-4 文法の実験の仕方
p152
ここは、単純なファイル名の間違いです。
誤「MyObjCTest.m」
正「ObjCTest.m」
Lesson 12 メモリ管理
12-5-4 インスタンスの解放
p213
ここでは、deallocメソッドの説明をしている。例として、Lesson 11のソースコードを取り上げているんだけど、このコードの箇所、無いでしょ。これ、旧版ではあったソースコード。でも改訂したときに、Objective-C 2.0に対応という事で、ガベージコレクションを使うようにしたんだ。その方がなにかと楽なんでね。deallocメソッドも必要なくなったので、削除したら。でもそしたら、ここの記述と矛盾が発生しちゃったよ。
というわけで、次のように訂正させてください。
誤「 具体的な例も見てみよう。Lesson 11のチュートリアルで作ったRSSリーダだ。このアプリケーションのAppControllerクラスには、delloacメソッドを実装していた。次のようなコードだったよね。」
正「 具体的な例も見てみよう。AppControllerうクラスに、documentっていうインスタンス変数があるとしよう。このクラスでのdeallocメソッドは、次のようになると思う。」