2012-02-05 4 views
6

У меня одно представление в моем раскадровки, который я добавить к моему текущему виду, выполнив следующие действия:Сбой при инстанцировании ViewController из раскадровки

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
      [self.view addSubview:mvc.view]; 

storyboard

появляется мнение, но все, что я после его появления приводит к сбою. Что я делаю не так ?

Вот пример, когда он выходит из строя:

-(IBAction)showUsername:(id)sender{ 

    [testLabel setText:@"username"]; 

} 

Все подключил в раскадровке, так что ложно связанные соединения не должны вызывать проблемы.

+0

вы должны показать ваш журнал аварии здесь ... – Seamus

+0

нет ничего более синего «(GDB)» ... –

ответ

8

Вы инстанцируете новый контроллер представления:

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 

Но вы не сохраните его. Ваша иерархия представлений, как только вы добавили ее в другое представление.

[self.view addSubview:mvc.view]; 

Так что, когда кнопка нажата, сообщение посылается вам IBAction, но ваш контроллер представления был выпущен уже. Чтобы этого не произошло, сохраните переменную mvc, например, где-нибудь в свойстве.

@property(nonatomic, strong) MainViewController *controller; 

self.controller = mvc; 
+0

Да, спасибо, я снова задал этот вопрос и получил тот же ответ ... Проблема уже решена, но спасибо в любом случае. Я уверен, что это тоже поможет другим. –

+0

Люблю тебя <3 консоль отладки даже не дает подсказки, чтобы узнать это! –

0

enter image description here

Я думаю, все причины, прежде чем показать журнал ...

+0

Я думаю, что он освобождается или нет, не правильно инстанцирован ... Но я не знаю, как его решить. Я назначил его классу контроллера, он должен работать нормально. –

+0

@ user1066899 вы можете нажать ctrl и перетащить ваш viewcontroller из ib в ваш .h-файл. то все в порядке. – Seamus

+0

нет, к сожалению, я не могу ... Что бы это было? –

0

Turn NSZombie на в продукте >> Редактировать Схема вы должны получить, показывая более описательные ошибки тогда. Затем вы можете добавить его.

+0

Да, спасибо, что отлично работает. Теперь я, наконец, получил ошибку, и, как я полагал, мой ViewController получает освобождение '- [MainViewController performSelector: withObject: withObject:]: сообщение отправлено на освобожденный экземпляр 0x3fa5a60' –

+0

Но я не знаю, как его решить ... можете ли вы Помоги мне ? –

0

Убедитесь, что ваш метод объявлен и введен правильно. Также убедитесь, что у вас есть IBOutlet UILabel * testLabel в вашем .h. Единственная проблема, о которой я могу думать, - это то, как вы ее подключили. Это только краш, когда вы нажимаете кнопку?

0

Эта строка неверна, поэтому вы получите сообщение об ошибке.

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
     [self.view addSubview:mvc.view]; 

заменить его с этим

MainViewController *mvc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainController"]; 
[self presentModalViewController:mvc animated:YES]; 

В раскадровки вы не добавляешь подвид вы делаете один из трех вещей, представляющей модальность, толкая его в стек навигации контроллера или сделать на заказ один из этих.

+0

Приложение addubview зарезервировано для отображения представления. – Popeye

Смежные вопросы