iPhone. UITableView и толкающий контроллер представления - PullRequest
2 голосов
/ 14 марта 2010

У меня есть рабочий UITableView в моем контроллере представления. Это успешно заселяется и, кажется, хорошо. Однако, когда я пытаюсь использовать следующую функцию, новое представление не загружается (функция вызывается, я получаю вывод из NSLog):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"asf");
    [self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
}

В чем может быть проблема? Я не получаю ошибок компиляции или отладки / предупреждений.

РЕДАКТИРОВАТЬ: я попытался выделить и инициализировать контроллер представления вручную. Я верю, что Пламен прав, потому что self.navigationController равен нулю. Однако мне пока не удалось.

EDIT2: я использую [self.navigationController pushViewController: .. функция успешно в остальной части приложения. Это единственное исключение. navigationController равен нулю, когда у меня есть UITableView. Это почему? Что делать?

альтернативный текст http://files.droplr.com/files/11625842/AUk9W.Screen%20shot%202010-03-14%20at%2009.56.42.png

Ответы [ 4 ]

3 голосов
/ 14 марта 2010

Вы должны использовать и UINavigationController для этого. Это твоя проблема. И вам нужно инициализировать sendRequestFavoriteController. Есть больше, чем объявить это как собственность. Это не просто "волшебным образом" создаст этот объект для вас. Обычно вы создаете этот объект, прежде чем поместить его в стек следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"asf");

    SendRequestFavoriteController *aController = [[SendRequestFavoriteController alloc] initWithNibName:@"theNameOfTheNib" bundle:nil];
    self.sendRequestFavoriteController = aController;
    [aController release];

    [self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
}

Но я не вижу необходимости объявлять sendRequestFavoriteController иваром. Таким образом, вы сделаете это (и избавитесь от своей собственности и ivar):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"asf");

    SendRequestFavoriteController *aController = [[SendRequestFavoriteController alloc] initWithNibName:@"theNameOfTheNib" bundle:nil];
    [self.navigationController pushViewController:sendRequestFavoriteController animated:YES];
    [aController release];
}

Чтобы использовать UINavigationController, вам нужно заменить текущий UIViewController на UINavigationController, в котором есть UIViewController.
Взгляните на Руководство по программированию контроллера View от Apple.
Редактировать: под "текущим" я подразумеваю выбранную вкладку "история". Или о контроллере представления, о котором вы говорите.

1 голос
/ 14 марта 2010

Ваше табличное представление в стеке UINavigationController вообще?В противном случае свойство navigationController будет равно нулю (и вызов метода ничего не изменит).

0 голосов
/ 14 марта 2010

ChriB прав. Вот его комментарий:

Вы уверены, что используете UINavigationController для вкладки "история"? А внутри этого UINavigationController ваш UIViewController? - ChriB

Дело в том, что мне нужно добавить UINavigationController в главном окне (в Интерфейсном Разработчике), а затем UIViewController внутри Моя ошибка заключалась в добавлении UIViewController напрямую.

0 голосов
/ 14 марта 2010

Попробуйте это

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"asf");

  sendRequestFavouriteController *sendRequest=[[sendRequestFavouriteController alloc]initWithNibName:@"sendRequestFavouriteController" bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:sendRequest animated:YES];
[sendRequest release];

}

Всего наилучшего

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