2014-04-18 3 views
1

я наткнулся, за исключением «NSInternalInconsistencyException», когда я пишу код ниже в viewcontroller, который связан с раскадровки:Почему «NSInternalInconsistencyException» происходит, когда метод ПЕРЕЗАПИСАТЬ «initWithCoder»

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

Однако, если я удалить строка 'self.view.backgroundColor = [UIColor blackColor];', нет проблем. Я не знаю причины.

На самом деле, в стройнике есть несколько контроллеров, и я хочу создать базовый контроллер для всех контроллеров. Целью является то, что я хочу установить для них фоновый вид (UIView).

Я пытаюсь добавить UIView в метод basecontroller viewDidLoad, но вид охватывает любые компоненты, установленные в раскадровке. Я думаю, причина в том, что компоненты на контроллерах sub view инициализируются в методе 'initWithCoder' до вызова метода 'ViewDidLoad'. Поэтому я пытаюсь добавить bgView в метод «initWithCoder» базового контролера, и это привело к проблеме выше.

Так что я также хочу знать правильный путь для достижения своей цели. Благодаря!

+0

В чем же сообщение об ошибке? – Larme

+0

Почему бы вам не сделать это простым способом, добавив его в viewDidLoad, как вы сказали, а затем отправив его обратно, чтобы он не мог охватить другие виды. Он перейдет в самую отсталую позицию, когда вы вызовете viewDidLoad на супер, чтобы это было так. – Zen

ответ

1

dont установить свойства, связанные с графикой, в init и принести subview спереди. Установите их с

-(void)awakeFromNib 
{ 
    [self.view.superview bringSubviewToFront:self.view]; 
    self.view.backgroundColor = [UIColor blackColor]; 
} 
Смежные вопросы