2015-02-22 5 views
0

У меня есть приложение с двумя (2) XIB-файлами; один из них является основным, другой - видом справки. У меня есть контроллеры представлений, созданные для обоих. У меня есть кнопка на главном просмотра XIB, который вызывает вид помощи, который работает следующим образом:Как вызвать XIB и вернуться к вызывающему XIB?

- (IBAction)bDisplayHelp:(UIButton *)sender { 

HelpViewController *svc = [HelpViewController new]; 
svc = [[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil]; 

[self.view addSubview: svc.view]; 

}

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

- (IBAction)bBackToMainNib:(UIButton *)sender { 

MainViewController *tvc = [MainViewController new]; 
tvc = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
[self.view addSubview: tvc.view]; 

}

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

*** Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», почему-то : '- [__ NSCFString bBackToMainNib]: непризнанный селектор отправляется например 0x7d3586b0'

Что я делаю не так?

+0

Как вы называете метод bBackToMainNib? –

+0

это действие на UIButton – SpokaneDude

ответ

1

Извините, что вы делаете почти все неправильно. Прежде всего, ваша первая строка в bDisplayHelp: бесполезна, так как вы переопределяете svc в следующей строке (у вас такая же проблема в bBackToMainNib :). Замените эти две строки с,

HelpViewController *svc = [[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil]; 

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

В-третьих, вы не должны добавлять представление одного контроллера к виду другого, если только вы не добавите этот контроллер в качестве контроллера детского представления (иначе диспетчер представлений будет освобожден). Вероятно, вы должны представить (а затем уволить, когда захотите вернуться) HelpViewController, вместо того, чтобы добавлять его представление в качестве подсмотра (хотя, поскольку я не знаю, каковы ваши намерения, это может быть не самый лучший вариант). Я предлагаю вам прочитать «Руководство по программированию на просмотр контроллера для iOS», чтобы понять основные парадигмы программирования iOS.

Что касается вашей фактической ошибки, это тайна. В сообщении об ошибке говорится, что вы вызываете bBackToMainNib: на строку, а не на ваш контроллер; Я не уверен, как это может произойти.

+0

Спасибо ... Я никогда раньше не работал с XIB, всегда использовал Storyboards и думал, что это будет хорошее упражнение. Я ценю ваш подробный ответ, облегчит мне перепроектировать эту часть приложения. – SpokaneDude