iPhone - ошибка загрузки вида контроллера - PullRequest
0 голосов
/ 18 июля 2010

Я постоянно загружаю контроллеры представления в следующем формате:

-(void)loadSelectUser {
    MyViewController *nextController = [[MyViewController alloc] initWithStyle:UITableViewStyleGrouped];

    MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.navigationController pushViewController:nextController animated:YES];
    [nextController release];   
}

И у меня никогда не было с этим проблем.Но сейчас я имею дело с тем, что следующее представление не загружается полностью.Появляется панель навигации, и оба метода viewDidLoad и numberOfSectionsInTableView вызываются.Вот и все.Таблица не отображается, она все еще показывает предыдущее представление.

Я предполагаю, что это означает, что произошла утечка памяти или что-то неправильно подключено.Это правильный путь для поиска?Если да, то каково ваше лучшее предложение для устранения этой проблемы.В моем коде нет сообщений об ошибках, поэтому я не уверен, с чего начать.Я правильно загружаю представление в другой контроллер, но по какой-то причине он не делает этого после этого конкретного представления *.

* Это представление делает много манипуляций с данными при загрузке объектов, их сохранении и т. Д.,Но опять же, похоже, что все работает правильно.Что может испортить навигационный контроллер при полной загрузке следующего вида?

О, и просто еще больше испортить ситуацию, иногда это работает правильно.Но я запускаю его еще раз, и он больше этого не делает.

Обновление: комментарий TechZen о правильном способе установки нового контроллера представления, похоже, немного помог.Существует более высокая скорость его работы, если я не нажимаю на tableviewcontroller.В зависимости от действия мое представление будет выдвигать UITableViewController или UIViewController с файлом пера.Второй обычно (не всегда) работает.

Кроме того, в другом представлении я добавляю модальное представление.Но когда я пытаюсь отклонить его, используя [self dismissModalViewControllerAnimated:YES];, это не всегда работает.Снова это ударил или пропустил это.Кто-нибудь имеет представление о том, что будет причиной перехода окон быть привередливым?

1 Ответ

2 голосов
/ 18 июля 2010

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

Опасно вызывать контроллер навигации делегата приложения, поскольку у вас нет гарантии, что вы получите тот же контроллер навигации, что и тот, который в данный момент содержит контроллер представления, вызывающий push.В теории вы могли бы получить два перекрывающихся и конфликтующих навигационных контроллера.

Переключите код на self.navigationController и посмотрите, решит ли это проблему.

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