为什么在覆盖'initWithCoder'方法时会发生'NSInternalInconsistencyException'

时间:2014-04-18 10:50:12

标签: ios objective-c

当我在与故事板相关联的NSInternalInconsistencyException中编写以下代码时,我遇到了异常“viewcontroller”:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.view.backgroundColor = [UIColor blackColor];
    }
    return self;
}

但是,如果我删除“self.view.backgroundColor = [UIColor blackColor];”行,则没有问题。我不知道原因。

实际上,在stroyboard中我有几个控制器,我想为所有控制器制作一个基本控制器。目的是我想为他们设置一个背景视图(UIView)。

我尝试在basecontroller的UIView方法中添加viewDidLoad,但该视图涵盖了故事板中设置的所有组件。我认为原因是子视图控制器上的组件在调用'initWithCoder'方法之前在'ViewDidLoad'方法中初始化。所以我尝试在basecontroller的'initWithCoder'方法中添加bgView,这导致了上面的问题。

所以我也想知道实现目标的正确方法。谢谢!

1 个答案:

答案 0 :(得分:1)

不要在init中设置与图形相关的属性,并将子视图放在前面。从

设置它们
-(void)awakeFromNib
{
    [self.view.superview bringSubviewToFront:self.view];
    self.view.backgroundColor = [UIColor blackColor];
}