У меня есть 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
, или это настройка перед выходом?
Большое спасибо
Я ничего не вижу в этом коде, который займет почти столько времени. Выполняете ли вы какие-либо длительные операции в методах инициализации или viewDidLoad контроллера назначения? – rdelmar
Я читаю контакты в методе 'viewDidLoad'. Я тестирую около 1.500 контактов в симуляторе. Это может быть проблема? Я не делаю этого по основному потоку – bdv
Попробуйте прокомментировать этот код и посмотрите, будет ли он быстрее. – rdelmar