Ios 为什么';n内部一致性异常';覆盖时发生';使用编码器初始化';方法

Ios 为什么';n内部一致性异常';覆盖时发生';使用编码器初始化';方法,ios,objective-c,Ios,Objective C,当我在与情节提要关联的viewcontroller中编写以下代码时,遇到异常“nsinternalinconsistenceexception”: - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { self.view.backgroundColor = [UIColor blackColor]; } return

当我在与情节提要关联的
viewcontroller
中编写以下代码时,遇到异常“
nsinternalinconsistenceexception
”:

- (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的
viewDidLoad
方法中添加
UIView
,但该视图包含在情节提要中设置的所有组件。我认为原因是,在调用“
ViewDidLoad
”方法之前,子viewcontrollers上的组件是在“
initWithCoder
”方法中初始化的。因此,我尝试在basecontroller的“initWithCoder”方法中添加bgView,这导致了上述问题


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

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

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

整个错误消息是什么?为什么不像你说的那样简单地将其添加到viewDidLoad中,然后将其发送到后面,这样它就不能覆盖其他视图。当您在super上调用viewDidLoad时,它将进入最向后的位置,就是这样。