执行 segue 占用太多时间

Performing segue taking up too much time

我的应用程序中有一个 -[self performsSegueWithIdentifier:..] 方法。单击键盘中的 "GO" 按钮后调用它。由于此时正在调用 API,因此加载数据大约需要 5 秒。所以,我在 -buttonAction 后面放了一个 -endEditing 命令。我还放入了一个 ActivityIndi​​cator。我试过两种方法。

1.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
dispatch_async(queue, ^{
    [self performSegueWithIdentifier:@"toSecond" sender:self];
});

2.

dispatch_async(dispatch_get_main_queue(), ^(void){
    [self performSegueWithIdentifier:@"toSecond" sender:self];
});

在第一种方法中,我让键盘消失,让 ActivityIndi​​cator 开始动画。但是移动到下一个 ViewController 大约需要 20 秒(我检查了断点:应用程序从 -prepareForSegue: 中的最后一个命令移动到下一个 [=28= 中的第一个命令的时间] 大约 15-18 秒)。 在第二种方法中,转换不需要任何时间,但是 -shouldEndEditing 部分和 -startAnimating 部分没有被执行。

试试这个:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"toSecond" sender:self];
});