2014-11-01 103 views
0

我有一個UITableViewController與聯繫人,當點擊聯繫人時,我想執行從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處理這段代碼。我還有另外兩支隊伍加入到同一個VC中,而那些隊員的時間差距只有1秒,但仍然是1-2秒。這可能與destinationViewController內部的設置有什麼關係嗎?或者是賽格之前的設置?

非常感謝

+1

我在代碼中看不到任何東西,應該花費很多時間。你是否在目標控制器的init或viewDidLoad方法中執行任何長時間運行的操作? – rdelmar 2014-11-02 00:01:55

+0

我正在閱讀'viewDidLoad'方法中的聯繫人。我在模擬器中測試了大約1.500個聯繫人。這可能是一個問題嗎?我沒有在主線程上做這件事 – bdv 2014-11-02 00:03:08

+0

嘗試評論這段代碼,看看它是否變得更快。 – rdelmar 2014-11-02 00:04:28

回答

0

的問題是由於在目標視圖控制器的方法的initWithCoder長時間運行的操作。將該代碼移入viewDidAppear,以及viewDidLoad中的任何代碼,該代碼依賴於initWitCoder中該代碼的結果。這應該可以讓賽車快速完成。最終,如果可能的話,您需要嘗試解決緩慢運行的問題。

相關問題