从自定义单元格select模式视图控制器segue iOS7问题

最终编辑

经过进一步的调查,我认为最好是重新提出这个问题,提供更多有关这个问题的信息。

这个问题似乎只发生在iOS7上。 我已经在iOS6上testing过了,这个工作没有问题。

– 安装程序设置是你有一个UIViewController (例如第一个VC),它拥有一个tableView,是数据源/委托。 当tableView中的单元格被选中/点击时,你执行第二个视图控制器(现在可以是空的)。

问题

问题是赛格不会立即发生。 如预期的在一秒之内。 在segue中没有数据被传递,或者在第二个视图控制器中加载的任何东西,所以你期望它是即时的。

有时候,这可以正常工作,没有任何问题。 其他时候,你会点击单元格,什么都不会发生。

– 被关注的趋势我注意到,当“问题”发生时。 模拟器/设备将等待,直到下一分钟开始,然后强制通过模态视图控制器的负载。 或者当问题发生时,您可以再次点击/点击设备屏幕上的任何地方,以“强制”负载。

这个问题可以在一个新的项目中复制,只是基础知识。我已经上传了一个包含这个项目的示例项目zip 。

附加代码(如果需要)

我有一个自定义的单元格设置。 当选中单元格时,执行以下操作:

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

然后我在prepareForSegue中有以下几点:

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

logging

下面是一些示例日志来显示此:运行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] – [SecondViewController viewDidLoad]
2013-10-09 23:55:00.004 App [14954:a0b] – [SecondViewController viewWillAppear:]
2013-10-09 23:55:00.511 App [14954:a0b] – [SecondViewController viewDidAppear:]

运行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] – [SecondViewController viewWillAppear:]
2013-10-09 23:57:00.508 App [14954:a0b] – [SecondViewController viewDidAppear:]

运行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] – [SecondViewController viewWillAppear:]
2013-10-09 23:58:00.510 App [14954:a0b] – [SecondViewController viewDidAppear:]

雷达苹果回填后回应补充道:

 dispatch_async(dispatch_get_main_queue(), ^{}); 

到下面的方法的末尾,这是诀窍:

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

在提供控制器的方法中,您可以安排一个禁止运行的程序块,这将强制运行程序旋转并且不会有任何延迟。

雷达编号:15196237,随时提交另一个文件,并参考这个。