2012-04-21 9 views
1

は、私がiOSでは、なぜViewControllerのinitが機能しませんでしたか? ViewControllerのインターフェイスで

@property int count; 

を持っており、実装で、私は

@synthesize count; 

-(id) init { 
    self = [super init]; 
    if (self) { 
     self.count = 100; 
    } 
    return self; 
} 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"%i", self.count++); 
} 

を持っていますが、何らかの理由で、self.countが印刷しまった最初の時間は、それが0ではなく100ですか?

+0

View Controllerはどのように作成されていますか? – ACBurk

+0

これは標準のSingle Viewアプリ –

答えて

2

あなたのUIViewController上では、.xib、storyboardから出てくるか、コード内の他の場所で手動でallocしているかによって、さまざまな方法が呼び出されます。

初期のこの種を置くためのより良い場所は、-viewDidLoadにあなたのinitメソッドでのNSLogやデバッグブレークポイントを置いて、この

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.count = 100; 
} 
+0

です。これは私たちが独自の 'init'メソッドですべてのinitコードを入れたパターンではありませんか? –

+1

ViewControllerがどのように初期化されているか心配する必要がないので、私はしばしば-viewDidLoadを使用するほうがきれいです。さもなければ、あなたは-initWithCoder、-intiWithNibName:bundleをカバーしなければならず、ちょうど普通の(おそらく他のもの) –

1

のようなものだと私はあなたがそれが呼び出されない見つけることができます疑い。 UIViewControllerを見ると、他の初期化メソッドが表示されます(たとえば、NIBを使用している場合、initWithNibName:bundle:が呼び出されます)。ストーリーボードを介している場合、それは異なる場合があります。アップルのView Controller Programming Guide for iOSの初期化の議論を参照してください。

一般的なビューコントローラの設定では、より良い場所はviewDidLoadです。

+0

はあなたが 'initWithNibName'について確信していますか?私はそのメソッドを追加してカウントを初期化しませんでしたが、メソッドのパラメータを定義しませんでした –

+0

私の主張は、initメソッドがたくさんあることです。このビューコントローラは、他のビューの1つが初期化、アロケート、およびオープンを行うビューコントローラである場合を除き、どちらが使用されているのかを推測しない方がよいでしょう。特定のinitメソッドではなく、 'viewDidLoad'で雑多な初期化を行いますか? – Rob

0

変更を:

- (id)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.count = 100; 
    } 
    return self; 
} 

ビューは実際にそれを「デコード」や、それをアンボクシングされXIB、によって作成されたばかり。これが発生すると、XIBはinitWithCoder:を呼び出します。

+0

あなたは二重チェックをすることができます...私は10000に設定しようとし、viewDidLoadで1を削除しましたが、10000に設定されていませんでした –

関連する問題