Segue занимает много времени, чтобы выполнить

У меня есть UITableViewController с контактами и при нажатии на контакт я хочу выполнить переход от контроллера viewview к фактическому контроллеру.

Это код, по которому я запускаю -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{
  // A lot of code, but it's basically saying: dependent of the section and whether you're searching or not, store the name and number you've selected.

  number = [[NSMutableArray alloc]init];
  if(indexPath.section == 0 && [self.usersWithNamesAndNumbers count] > 0){
    if (self.searchDisplayController.isActive) {
      index = [[self.searchDisplayController searchResultsTableView] indexPathForSelectedRow];
      name = [[self.searchedUsersWithNamesAndNumbers allKeys] objectAtIndex:index.row];
      number = [[self.searchedUsersWithNamesAndNumbers allValues] objectAtIndex:index.row];
    } else {
      index = [self.tableView indexPathForSelectedRow];
      name = [[self.usersWithNamesAndNumbers allKeys] objectAtIndex:index.row];
      number = [[self.usersWithNamesAndNumbers allValues] objectAtIndex:index.row];
    }
  } else {
    if (self.searchDisplayController.isActive) {
      index = [[self.searchDisplayController searchResultsTableView] indexPathForSelectedRow];
      name = [[self.searchedContactNamesWithNumbers allKeys] objectAtIndex:index.row];
      number = [[self.searchedContactNamesWithNumbers allValues] objectAtIndex:index.row];
    } else {
      index = [self.tableView indexPathForSelectedRow];
      name = [[self.contactNamesWithNumbers allKeys] objectAtIndex:index.row];
      number = [[self.contactNamesWithNumbers allValues] objectAtIndex:index.row];
    }
  }

  [self performSegueWithIdentifier:@"moveToView" sender:self];
  [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
  [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

И у меня есть код в prepareForSegue метод также:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
  if([[segue identifier] isEqualToString:@"moveToView"]){
    [[segue destinationViewController] setDidComeFromContacts:YES];
    [[segue destinationViewController] setNameLabelContents:[NSString stringWithFormat:@"%@,", name]];
    [[segue destinationViewController] setPhoneNumberLabelContents:number];
    [[segue destinationViewController] setText:@"Segue text"];
    [[segue destinationViewController] setCardId:@"EDf8oCCol2"];
  }
}

Для обработки этого кода требуется около 2-3 секунд. У меня также есть 2 других segues к тому же VC, и те занимают приблизительно 1 с меньше, но все еще 1-2 с. Может ли это быть как-то связано с настройкой внутри destinationViewController или это настройка до перехода?

Большое спасибо

1 ответ

Решение

Проблема связана с длительной операцией в методе initWithCoder контроллера представления назначения. Переместите этот код в viewDidAppear, а также любой код в viewDidLoad, который зависит от результата этого кода в initWitCoder. Это должно позволить завершить переход быстро. В конечном счете, вам нужно будет попытаться исправить проблему с этим медленным методом, если это возможно.

Другие вопросы по тегам