小编Pao*_*ini的帖子

在显示新视图之前,iOS segue冻结了几秒钟

在我的应用程序的主视图中,我有一个表视图和两个原型单元格.我使用故事板为每个单元配置了segue.在视图控制器中,我覆盖prepareForSegue以将所选单元格上的信息传递到目标视图.

目标视图不是特别复杂,当然也不需要任何繁重的处理来加载.

问题

当我第一次点击主控制器中的单元格时,目标视图会在长时间延迟后显示,从5到40秒.

编辑#2:后续的点击通常更快

注意:

  • 如果在目标视图出现之前再次点击同一单元格,则会触发目标视图立即显示.
  • 如上所述,但是点击不同的单元格会导致视图立即显示,但会显示来自第一个单元格的数据.
  • 如上所述,但是点击不同的控件(没有关联的segues)会触发目标视图立即显示.
  • 随后的"轻敲"通常表现出较少的延迟.
  • Time Profiler - 我能看到的 - 表明在那么多秒的延迟期间绝对没有发生任何事情.
  • 我尝试过不同类型的segue,但没有区别
  • 一些println显示以下事件序列发生:

    • 在主视图中,执行prepareForSegue(没有延迟)
    • 然后执行目标viewDidLoad(没有延迟)
    • ......长时间拖延......
    • 目标控制器中的集合和表视图开始调用与数据源相关的方法以从控制器获取数据.
    • 视图终于出现了(带有不需要的动画,BTW,但这是一个不同的问题)

根据我在这个主题上的内容,我怀疑这个问题可能与后台线程中发生的一些上述操作有关.

知道我可能做错了什么吗?

编辑#1:添加了一些代码

在主视图控制器中,segue已使用故事板链接(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")
}
Run Code Online (Sandbox Code Playgroud)

编辑#3我在BitBucket上提供了一个示例项目

uiviewcontroller ios segue uistoryboardsegue swift

15
推荐指数
1
解决办法
4630
查看次数

如何在 SwiftUI 的视图中调用方法

刚刚开始使用 SwiftUI。

我有一个GoogleMapsViewContentView 使用CLLocationManager中我捕获事件AppDelegateSceneDelegate类与扩展它们的方式CLLocationManagerDelegate

如何在GoogleMapsViewfromAppDelegate或 中调用方法SceneDelegate

在这种情况下,我想.animate在通过 将位置更改事件发送到AppDelegate实例时调用该方法CLLocationManagerDelegate,但问题确实更通用。

google-maps-sdk-ios swiftui

2
推荐指数
1
解决办法
5220
查看次数