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)