2014-11-01 4 views
0

У меня есть UITableViewController с контактами, и при нажатии на контакт я хочу выполнить segue от контроллера tableviewcontroller до фактического контроллера.Segue занимает много времени, чтобы выполнить

Это код, который я бегу на -(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-3s обрабатывать этот код. У меня также есть 2 других сегмента для одного и того же VC, и они занимают примерно 1 сек меньше, но все равно 1-2. Может ли это иметь какое-либо отношение к настройке внутри destinationViewController, или это настройка перед выходом?

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

+1

Я ничего не вижу в этом коде, который займет почти столько времени. Выполняете ли вы какие-либо длительные операции в методах инициализации или viewDidLoad контроллера назначения? – rdelmar

+0

Я читаю контакты в методе 'viewDidLoad'. Я тестирую около 1.500 контактов в симуляторе. Это может быть проблема? Я не делаю этого по основному потоку – bdv

+0

Попробуйте прокомментировать этот код и посмотрите, будет ли он быстрее. – rdelmar

ответ

0

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

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