UINavigationController перестает выдвигать представление - PullRequest
0 голосов
/ 28 июня 2011

Мы используем контроллер навигации и контроллер представления, чтобы отобразить вопрос пользователю. Все работало нормально, но мы внесли некоторые изменения в пользовательский интерфейс, чтобы мы могли перенести приложение на iPad, единственными изменениями было сделать динамический фрейм табличного представления на iphone или ipad. Однако теперь, когда мы добрались до 187 вопроса из 335, он больше не выдвигает новый вопрос ... он выдвигает пустой экран, и метод "viewDidLoad" контроллера удаленного просмотра никогда не вызывается, как это было в прошлом 187 раз. Мы установили точки останова, чтобы убедиться, что контроллер навигации и контроллер представления по-прежнему размещены в памяти, и они являются.

Вот viewDidLoad контроллера представления, который вызывается при каждом новом нажатии ...

- (void)viewDidLoad {
_tableView = [[QuestionTableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];

_tableView.center = CGPointMake(self.view.center.x, self.view.frame.size.height/2);
[_tableView setDataSource:self];
[_tableView setQuestionDelegate:self];
[_tableView setDelegate:self];
_tableView.scrollEnabled = YES;

[_tableView setBackgroundView:[[[UIView alloc] init] autorelease]];
_tableView.directionalLockEnabled = YES;
_tableView.delaysContentTouches = NO;

_tableView.backgroundColor = [UIColor clearColor];
_tableView.opaque = NO;
[self.view addSubview:_tableView];

}

Мы нажимаем на контроллер вида ...

[questionsNavigationController pushViewController:viewController animated:YES];

Спасибо заранее! :)

Ответы [ 3 ]

0 голосов
/ 24 июля 2011

Вам действительно нужны все вопросы в стеке? Как насчет popViewControllerAnimated: NO, прежде чем нажимать следующий, также с animated: NO?

Он работает на симуляторе, потому что его память - это память ПК. Поместите NSLog в ваш метод -didReceiveMemoryWarning, чтобы увидеть, что ему не хватает памяти.

0 голосов
/ 24 июля 2011

Возможно, вы не должны использовать NavigationController таким образом.Это .. некрасиво.

Я бы сделал одно из следующего:

  • "pop" ViewControllers, отстающие на 5-10 просмотров (используя setViewController)Другими словами - поддерживайте 5-10 просмотров позади, остальные будут освобождены (и результат сохранен).Как только пользователь решит вернуться (а в стеке 3-4 вида), восстановите еще несколько.
  • реализуйте поведение NavigationController самостоятельно - просто замените представления, а не складывайте их.Как только пользователь вернется, перезагрузите представление с необходимыми данными.
  • Если вы действительно думаете, что ваша реализация в порядке - попробуйте освободить как можно больше памяти из вашего представления, как только все станет горячо.
0 голосов
/ 28 июня 2011

Если вы уменьшите размер таблицы, вы сможете ответить на весь набор из 335 вопросов? Вы создаете ViewController для каждого вопроса?

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

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