performSegueWithIdentifier: метод, вызываемый из didSelectRowAtIIndexPath, медленно отображающий представление

У меня есть статическое UITableview и я пытаюсь перейти к модальному виду. Я не могу переходить непосредственно из ячейки в раскадровке, поскольку есть моменты, когда я бы хотел, чтобы segue не вызывался в зависимости от некоторой логики приложения. Поэтому я подключил segue до TableViewController и дал ему идентификатор в storyBoard. В TableViewController я затем вызываю метод ниже.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //Perform segue when first row in first section is touched if(indexPath.section == 0){ if(indexPath.row == 0){ [self performSegueWithIdentifier:@"view1" sender:self.view]; }}} 

по какой-то причине, когда ячейка прослушивается, модальное представление действительно медленно появляется. Я добавил NSLogs в модальные виды viewDidLoad и методы viewDidAppear. Функция viewDidLoad вызывается мгновенно, но viewDidAppear работает медленно. Это происходит, только когда ячейку прослушивают в первый раз после загрузки tableView. Кажется, что это связано с методом didSelectRowAtIndex, поскольку я попытался вызвать функцию executeSegueWithIdentifier из IBAction, вызванную с помощью кнопки на ячейке, и она отлично работает. Еще один момент, который следует упомянуть, если я сниму флажок animates checkBox на segue, он работает мгновенно. Если бы кто-нибудь мог помочь, я был бы очень благодарен.

вы можете переходить непосредственно из ячейки в раскадровку. Существует еще один метод делегирования, который может использоваться для контроля действия segue

 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { [super shouldPerformSegueWithIdentifier:identifier sender:sender]; if ([identifier isEqualToString:@"SegueIdentifier"]) { NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; if (0 == indexPath.row) { if (0 == indexPath.row) { return YES; } } } return NO; } 

Кажется, это проблема с потоками. Просто performSegueWithIdentifier вызов performSegueWithIdentifier с отправкой в ​​основной поток. Работает как масло!

 dispatch_async(dispatch_get_main_queue(), { self.performSegueWithIdentifier("SegueName", sender:self) }) 

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

 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //Perform segue when first row in first section is touched if(indexPath.section == 0){ if(indexPath.row == 0){ [self performSegueWithIdentifier:@"view1" sender:self]; } } } 

У меня была такая же проблема. Я не тестировал экстенсивно, но, похоже, это происходит в iOS 8.1, а не в iOS 7.1.2. Как ни странно, задержка была еще более продолжительной во второй раз, когда я выполнил размотку. (например: нажмите кнопку, чтобы представить UITableViewController, нажмите кнопку закрытия, чтобы размотать, снова открыть, заново закрыть – медленно!)

Вы что-то передавали sender: когда вы представили свой TableViewController? Я передавал self так:

 [self performSegueWithIdentifier:@"TableViewSegue" sender:self]; 

… но я обнаружил, что проходящий nil вместо этого затягивает задержку. Иногда он все еще существует, но только около 0,5 с на iPhone 6. Такая странная проблема. Я также вынул sender:self в своей команде», на всякий случай.

Проведя еще несколько тестов, около 1 раза в 5 раз он разматывается с действительно ужасной задержкой … около 4-5 секунд! Нажатие строки во второй раз, по-видимому, действительно делает разматывающий огонь сразу. Но ничего себе, эта ошибка довольно неприятная. Мы должны сообщать об ошибках: https://bugreport.apple.com/

  • iOS - развернуть / свернуть раздел UITableView с анимацией
  • Невозможно настроить UITableViewCell в Xcode6, потому что «Автоматический синтез свойств не будет синтезировать свойство ..»
  • Невозможно избавиться от цвета фона разделов в сгруппированном UITableView
  • Доступ к объектам NSMutableArray для использования в TableView
  • Невозможно изменить позицию subview в UITableViewCell
  • Показать несколько uiwebviews в uitablview
  • Как остановить прокрутку в центре ячейки, которая больше высоты экрана
  • tableView: commitEditingStyle: forRowAtIndexPath: вызывает сбой утверждения
  • Как загружать изображения асинхронно в uitableview без предупреждения о памяти?
  • выйти из режима редактирования и обновить элементы навигационной панели
  • Параметры верхнего и нижнего колонтитула в TableView
  • Давайте будем гением компьютера.