Сбой при создании экземпляра ViewController из раскадровки - PullRequest
6 голосов
/ 05 февраля 2012

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

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

storyboard

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

Вот пример, когда он падает:

-(IBAction)showUsername:(id)sender{

    [testLabel setText:@"username"];

}

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

Ответы [ 5 ]

8 голосов
/ 07 февраля 2012

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

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

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

[self.view addSubview:mvc.view];

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

@property(nonatomic, strong) MainViewController *controller;

self.controller = mvc;
0 голосов
/ 07 февраля 2012

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

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

замените его на

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

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

0 голосов
/ 05 февраля 2012

Включите NSZombie в Product >> Edit Scheme, вы должны получить более информативное сообщение об ошибке. Тогда вы можете добавить его.

0 голосов
/ 05 февраля 2012

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

0 голосов
/ 05 февраля 2012

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...