2016-03-31 2 views
2

У меня есть контроллер панели вкладок, внутри одной из вкладок У меня есть 3 контроллера контейнера. Только один может быть представлен, другие удалены в данный момент. Представления для этих контроллеров определены в xib.Неожиданная задержка после нажатия контроллера просмотра

В одном из этих контейнеров у меня есть вид на стол.

Когда я нажимаю на ячейку, я должен нажать контроллер просмотра.

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

Я печатаю время, когда в didSelectRowAtIndexPath и в viewDidLoad нового контроллера, и задержка составляет от 2 до 4 секунд.

Это код я использую для толкания вид контроллера:

EventDetailsViewController *eventDetailsVc = [[EventDetailsViewController alloc]init]; 
Events *event = [self.events objectAtIndex:indexPath.row]; 
eventDetailsVc.curentEvent = event; 
NSDateFormatter *f2 = [[NSDateFormatter alloc] init]; 
[f2 setDateFormat:@"dd MMMM, hh:mm:ss.SSS a"]; 
NSLog([f2 stringFromDate:[NSDate date]]); 

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.navigationController pushViewController:eventDetailsVc animated:YES]; 
}); 

Обычно я не использую dispatch_async при нажатии вид контроллера, но это был один из предложенных решений, которые я нашел. Я также пробовал self.parentViewController.navigationController, те же результаты.

Я не знаю, что делать с этой задержкой, кто-то может мне помочь.

Спасибо.

+0

Возможно, ваш главный поток заблокирован, так или иначе, не так ли? – kirander

+0

Вы выполняете любую задачу в методах init() или viewdidload(), которые блокируют ваш основной ui? –

+0

Спасибо за предложения. Я загружаю данные в viewDidAppear. Вы можете увидеть пример в комментарии первого ответа. – Paki

ответ

1

Скорее всего, контроллер детского просмотра является проблемой здесь. Убедитесь, что viewDidLoad/loadView не запускает никаких дорогостоящих операций (например, загрузка данных из Интернета).

viewDidLoad & loadView только один раз, когда контроллер вида отображается в первый раз. После того, как свойство view установлено, эти методы больше не срабатывают.

Любая загрузка содержимого должна выполняться в фоновом потоке (возможно, с использованием библиотеки, такой как AFNetworking) и должна (обычно) запускаться в viewWillAppear или viewDidAppear.

+0

Вольфганг, спасибо за ответ. С точки зрения загрузки я только назначил делегат и источник данных tableView для себя. В viewDidAppear я загружаю данные из Интернета. Я не использую AFNetworking, я не могу этого сделать в этом проекте. Вот как я звоню в веб-службу [NSURLConnection sendAsynchronousRequest: urlRequest queue: [NSOperationQueue currentQueue] завершениеHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError) { – Paki

+0

Отключить сетевой код и посмотреть, медленный. Если это правда, возможно, возникают проблемы с загрузкой xib. В противном случае проблема связана с сетевым или синтаксическим кодом. –

Смежные вопросы