たのしい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メソッドは、次のようになると思う。」


  • Contact to mkino@hmdt.jp