4

我注意到,如果您从 nib 加载连接的视图,如果您想添加初始化代码,则必须覆盖 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

我在另一个答案中对此进行了解释,请参阅Does interface builder use the init method to initialize view controllers?

于 2010-02-04T14:36:20.153 回答
1

我做同样的事情,只是我很懒,我的方法通常被称为-didInit.

于 2010-01-24T21:30:05.540 回答