Window-basedとView-based
iOSプログラミング 第2版を読んでいるのだが、いきなり詰まっている。
この書籍、Xcode 4.1ベースで書かれているのでシンプルなプロジェクトを作成するケースではいわゆる「Window-based」をテンプレートとして使用しているのだが、私が今使用しているのはXcode 4.2であり、「Window-base」なテンプレートは無い。(「View-based」テンプレートはある)
テンプレートといっても単にビューの構成が違うだけなのであれば全然構わないのだが、Xcodeのテンプレートはクラスの構成自体が違うので非常に混乱するのである。
例えば、書籍ではViewを束ねて制御するViewControllerをAppDelegateプロトコルの実装クラスとして紹介しているが
@interface QuizAppDelegate : NSObject <UIApplicationDelegate> { int currentQuestionIndex; // The model objects NSMutableArray *questions; NSMutableArray *answers; // The view objects - don't worry about the IBOutlet macro, // we'll talk about it shortly IBOutlet UILabel *questionField; IBOutlet UILabel *answerField; }
そもそも内部にNSMutableArray型の変数とUILabel型のUIを同居させているのも違和感があるし、これをViewControllerと称して良い物か..
Xcode4.2ではViewControllerはそれ自体がクラスとして用意されており、
@interface ViewController : UIViewController
{}
と、クラスから全く違う。
恐らくは概念としてのViewControllerと実装としてのViewControllerの違いもあるのだろうが、Xcode4.1のWindow-basedテンプレートにはViewControllerは全く登場してこないのである。当然IBOutletの接続先も違う。
取りあえずは原著のサポートサイトで勉強してこようと思う。
iOS Programming: The Big Nerd Ranch Guide (2nd Edition)