iOS7 问题与模式视图控制器从自定义单元格选择的 segue



最终编辑

经过进一步调查,我认为最好重新发布该问题,其中包含有关 sepcific 问题的更多信息。

此问题似乎仅在iOS7上发生。我已经在iOS6上进行了测试,并且可以正常工作。

--设置设置是你有一个UIViewController(例如第一个VC(,它保存一个表视图,并且是数据源/委托。选择/点击 tableView 中的单元格后,您可以对第二个视图控制器执行 segue(现在可以为空(。

问题

问题是 segue 不会立即发生。如预期的那样在一秒钟内。没有数据在 segue 中传递,也没有在第二个视图控制器中加载任何内容,因此您希望它是即时的。

有时,这将正常工作,没有任何问题。其他时候,您将单击该单元格,什么也不会发生。

-

-注意到趋势我注意到的是,当"问题"发生时。模拟器/设备将等到下一分钟开始,然后强制通过模态视图控制器的负载。或出现问题时,您可以再次单击/点击设备屏幕上的任何位置以"强制"加载。

只需

了解基础知识,即可在新项目中重现该问题。我已经上传了一个包含此内容的示例项目zip。

附加代码(如果需要(

我有一个自定义单元格设置。选择单元格后,我执行以下操作:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s",__PRETTY_FUNCTION__);
    if (indexPath.section == 0) {
        [self performSegueWithIdentifier:@"selectGameTurnDiff" sender:self];
    } 
}

然后,我在准备ForSegue中有以下内容:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"%s",__PRETTY_FUNCTION__);
    [super prepareForSegue:segue sender:sender];
}

伐木

下面是一些示例日志来显示这一点:运行 1
2013-10-09 23:54:09.855 App[14954:a0b] -[FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:54:09.857 App[14954:a0b] -[FirstViewController prepareForSegue:sender:]
2013-10-09 23:55:00.004 App[14954:a0b] -[第二视图控制器视图DidLoad]
2013-10-09 23:55:00.004 App[14954:a0b] -[第二视图控制器视图将出现:]
2013-10-09 23:55:00.511 App[14954:a0b] -[第二视图控制器视图确实出现:]

运行 2
2013-10-09 23:56:21.900 App[14954:a0b] -[FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:56:21.901 App[14954:a0b] -[FirstViewController prepareForSegue:sender:]
2013-10-09 23:57:00.003 App[14954:a0b] -[SecondViewController viewDidLoad]
2013-10-09 23:57:00.003 App[14954:a0b] -[第二视图控制器视图将出现:]
2013-10-09 23:57:00.508 App[14954:a0b] -[第二视图控制器视图确实出现:]

运行 3
2013-10-09 23:57:43.387 App[14954:a0b] -[FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:57:43.388 App[14954:a0b] -[FirstViewController prepareForSegue:sender:]
2013-10-09 23:58:00.004 App[14954:a0b] -[SecondViewController viewDidLoad]
2013-10-09 23:58:00.004 App[14954:a0b] -[第二视图控制器视图将出现:]
2013-10-09 23:58:00.510 App[14954:a0b] -[第二视图控制器视图确实出现:]

在填满雷达后,苹果回应说:

dispatch_async(dispatch_get_main_queue(), ^{});

到以下方法的末尾,该方法可以解决问题:

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

在呈现控制器的方法中,可以计划无操作 块,这将迫使运行循环旋转并且不会有延迟。

雷达参考:15196237,请随时提交另一个并参考此。

最新更新