4

ペン先から接続されたビューをロードする場合、指定された初期化子が呼び出されないために初期化コードを追加する場合(これは理にかなっています)、およびビューをロードしない場合は、initWithCoderをオーバーライドする必要があることに気付きましたペン先から、指定された初期化子で同じコードを実行する必要があります。

したがって、両方のケースを処理するには、両方のメソッドで同じ初期化コードが必要です。

これは私がこれまでに思いついた最善の解決策ですが、これを行うためのより一般的な方法があるかどうか疑問に思う必要があります。このコードはUITableViewCellサブクラスにありますが、実際には任意のUIViewである可能性があります。

/*
 * Seems like there should be a standard method for this already.
 */
- (void)didFinishInitializingOrUnacrhiving {
    /*** Do stuff that makes the most sense to do in an initializer. ***/
}

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

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self didFinishInitializingOrUnacrhiving];
    }
    return self;
}

それで、これについて何か考えはありますか?これは物事を行うための「正しい方法」ですか、ここに潜在的な落とし穴がありますか、それとも私は何かを完全に見逃していますか?

4

2 に答える 2

2

これについては別の回答で説明しました。「InterfaceBuilderはinitメソッドを使用してViewControllerを初期化しますか?」を参照してください。

于 2010-02-04T14:36:20.153 に答える
1

私は怠惰で、私のメソッドは通常と呼ばれることを除いて、まったく同じことをし-didInitます。

于 2010-01-24T21:30:05.540 に答える