Проблемы с pushViewController

#iphone #objective-c #uiviewcontroller #push

#iPhone #objective-c #uiviewcontroller #толкать

Вопрос:

у меня есть приложение, в котором a есть корневой контроллер представления, который выводит на экран другой контроллер представления. этот контроллер просмотра показывает таблицу. когда выбрана ячейка, она переходит к другому контроллеру просмотра. Первый push работает, а второй — нет. Вот мой код для выбора ячейки в таблице:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

TwoViewController *two = [[TwoViewController alloc] initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:two animated:YES];
[two release];
  

Есть идеи, что я сделал не так? коды, которые я использовал для обоих нажатий, почти идентичны…
Я пробовал это, поместив этот код также в событие touchUpInside для UIButton, но это не работает.
Я предполагаю, что нет NavigationController для отправки представления, но я не знаю.
Пожалуйста, помогите!

Комментарии:

1. Можете ли вы опубликовать код, который вы используете для запуска первого контроллера просмотра?

Ответ №1:

Вы изменили метод -initWithNibName:bundle в TwoViewController? Я предполагаю, что он неправильно инициализируется (т. Е. Метод неправильно инициализирует суперкласс).

Редактировать: Я думаю, что нашел ошибку, на самом деле это довольно очевидно.

Пожалуйста, проверьте этот опубликованный вами код:

 initWithNibName:@"TwoViewController": bundle:[NSBundle mainBundle]];
  

Ошибка находится рядом со @"TwoViewController": строкой, лишняя точка с запятой, которой там быть не должно, измените ее на:

 initWithNibName:@"TwoViewController" bundle:[NSBundle mainBundle]];
  

Ответ №2:

Регистрируйте как ‘two’, так и self.NavigationController,

 NSLog(@"two = %@", two);

NSLog(@"self.navigationController = %@", self.navigationController);
  

Сначала вы узнаете, равен ли один из них нулю (или оба) и вызывается ли TableView:didSelectRowAtIndexPath: вообще.

Комментарии:

1. Вызывается TableView:didSelectRowAtIndexPath: я попробовал NSLog (@»вызывается метод») перед завершением метода и получил сообщение.

2. Но NSLog(@»self.NavigationController = %@», self.NavigationController); выдает результат ‘null’. два контроллера просмотра дали этот результат. означает ли это, что оба равны нулю? как я могу это решить? два = <TwoViewController: 0x4e21f70>

3. Выполняете ли вы какую-либо специальную инициализацию в TwoViewController или что-нибудь странное в viewDidLoad ? self.navigationController не должно быть нулевым.

Ответ №3:

Проблема с контроллером навигации.Проверьте это должным образом

Ответ №4:

Если новый контроллер представления является частью представления, у него, вероятно, нет контроллера навигации. Перед нажатием проверьте, равен ли нулю навигационный контроллер.

Комментарии:

1. Что вам следует сделать, так это предоставить NavigationController ViewController, который создает view в качестве параметра для view, чтобы view мог использовать NavigationController родительского ViewController.

2. Вам не обязательно это делать. self.navigationController Свойство будет установлено автоматически, когда вы нажмете на новый контроллер просмотра.

3. @kubi: Его subview не знает о своем NavigationController, поэтому он должен предоставить NavigationController в качестве свойства (assign) или любым другим способом, чтобы иметь возможность запускать ViewController (или он должен вызвать его в своем классе ‘superview’, но это был бы менее безопасный подход, не всегда можно быть уверенным, что superview является подклассом UIViewController).

4. Он сказал, что его класс является подклассом UIViewController , который был помещен в стек навигации. По умолчанию должно быть установлено свойство NavigationController, поэтому он, должно быть, где-то что-то перепутал.

5. Ах да, я думаю, я неправильно прочитал, я думал, что читал, что он создал подкласс UIView. В таком случае немного непонятно, почему NavigationController равен нулю.