【发布时间】:2015-08-29 16:08:02
【问题描述】:
在我的应用程序的主视图中,我有一个表格视图和两个原型单元格。我已经使用情节提要为每个单元格配置了 segues。在视图控制器中,我重写 prepareForSegue 以将所选单元格的信息传递给目标视图。
目标视图并不是特别复杂,当然也不需要任何繁重的处理来加载。
问题
当我第一次点击主控制器中的单元格时,目标视图会在很长一段时间后出现,从 5 到 40 秒。
编辑#2:随后的点击通常更快
注意:
- 如果我在目标视图出现之前再次点击同一单元格,则会触发目标视图立即出现。
- 如上所述,但点击不同的单元格会导致视图立即出现,但包含第一个单元格中的数据。
- 如上所述,但点击不同的控件(没有关联的转场)会触发目标视图立即出现。
- 随后的“点击”通常显示较少延迟。
- 时间分析器 - 就我所见 - 表明在这么多秒的延迟期间绝对没有发生任何事情。
- 我尝试了不同类型的 segue,但没有任何区别
-
一些 println 显示发生了以下事件序列:
- 在主视图中,prepareForSegue 被执行(没有延迟)
- 然后执行目标 viewDidLoad(无延迟)
- ...长时间延迟...
- 目标控制器中的集合和表视图开始调用与数据源相关的方法以从控制器中获取数据。
- 视图终于出现了(带有不需要的动画,顺便说一句,但这是另一个问题)
根据我阅读的有关此主题的内容,我怀疑该问题可能与后台线程中发生的上述某些操作有关。
知道我做错了什么吗?
EDIT #1:添加了一些代码
在主视图控制器中,已使用故事板链接转场(按住 CTRL 键将两个原型单元格拖到目标视图中)。
代码如下所示:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
var assetIndex = assetsTable.indexPathForSelectedRow()?.row
println("prepare for segue - start: \(assets[assetIds[assetIndex!]]!.Name)")
if let destination = segue.destinationViewController as? AssetThingsListViewController
{
destination.bundlesRepository = bundlesRepository!
destination.asset = assets[assetIds[assetIndex!]]
}
println("prepare for segue - end")
}
EDIT #3我在BitBucket上提供了一个示例项目
【问题讨论】:
-
我认为这是一个错误。我以前每次第一次做segue时也会发生这种情况。从 iOS 8 开始。
-
您是否尝试过在发布模式下运行应用程序?我猜你只会在调试模式下看到这种行为。
-
不幸的是,它也在发布模式下不断发生。
-
您能否上传一个示例项目,用最少的代码演示您的问题?另外,您在哪里看到这种行为?设备、模拟器,还是两者兼有?
-
我在BitBucket上提供了一个示例项目
标签: ios swift uiviewcontroller segue uistoryboardsegue