2011-12-15 19 views
45

私は自分のカスタムを作成していますUITableViewCellプロトタイプのセルのバックエンドとして使用する。私のクラスでは、私はいくつかのカスタム初期化を行うinitwithstyle:reuseIdentifier:メソッドをオーバーライドしますが、私のイニシャライザは呼び出されません。私はその中の最初の行にブレークポイントを持ち、また、ブレークポイントはdequeueResusableCellWithIdentifier:です。 dequeueResusableCellWithIdentifier:メソッドが呼び出され、初期化されたセルが返されますが、ブレークポイントはinitwithstyle:reuseIdentifier:に達しません。どんな助けも素晴らしいだろう。initwithstyle:reuseIdentifier:呼び出されていない

+0

私たちにそれが細胞にしてください作成し、戻っていますあなたの 'UITableViewDataSource'のコードを表示します。 – mattjgalloway

+0

私は同じ問題があります。しかし、私はストーリーボードを使用していないので、プログラムで作成しています。 initWithStyleが呼び出されない理由は誰でも知っていますか? – Michael

答えて

82

(IBでカスタムクラスとして宣言した)ストーリーボードプロトタイプからセルを作成している場合は、ペン先からロードされた他のオブジェクトと同様に、initWithStyle...ではなくinitWithCoder:で作成されます。セットアップコードがある場合は、そこにあるか、awakeFromNibにあるはずです。

+3

文書のどこかには、ペン先からロードするときに常にinitWithCoderが使用されていますか?あなたの答えは助けになりましたが、私が紛失してしまったことがある場合に備えて関連する文書を読んでみたいと思います。 –

+3

良い質問です! 「インターフェイスビルダで作成されたビューインスタンスを初期化する」の下の[こちら](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html)を見つけることができます。 – jrturton

+4

Hmm興味深いことに、awakeFromNibを使って初期設定を行うことをお勧めします。 initWithCoderは毎回確実に呼び出されますか? –

12

ストーリーボードを使用すると、すべてが変更されます。これは呼び出されるメソッドです。あなたがStoryBoarsdを使用している場合

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (!(self = [super initWithCoder:aDecoder])) return nil; 

    // Your code goes here! 

    return self; 
} 
0

その後、UITableViewContollerがinitWithStyleはinitWithCoderに置き換える呼び出しません、それは作品が今

関連する問題