【问题标题】:Swift Segue programmatically takes long timeSwift Segue 以编程方式需要很长时间
【发布时间】:2015-07-06 16:43:49
【问题描述】:

使用 Swift 和 Xcode 6.4,我正在创建一个登录系统。它运作良好。我从网站获取 XML 数据并检查用户是否已登录。

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {

    if elementName == "isLoggedIn" {
        if elementValue == "true" {
            success = true
            println(success)
            println("IS HERE")
            self.performSegueWithIdentifier("LoginIsOk", sender: nil)

        }else if elementValue == "false"{
            success = false
            println(success)
        }
        elementValue = nil
    }  
}

当我运行 APP 时,“println("IS HERE")" 需要 1 秒。 所以我假设。

self.performSegueWithIdentifier("LoginIsOk", sender: nil)

之后执行。但是显示另一个 ViewController 需要大约 5 秒。

如果我也这样做,但在 UIButton 中,例如,单击它后,它会立即显示第二个 ViewController。

知道为什么 func 解析器需要这么长时间吗?谢谢。

【问题讨论】:

    标签: ios swift segue


    【解决方案1】:

    尝试将其放入不同的线程中:

    dispatch_async(dispatch_get_main_queue(), {
      self.performSegueWithIdentifier("LoginIsOk", sender: nil)
    })
    

    正是出于这个原因,所有 UI 调用都应该放在主线程中 - 我们希望 UI 活泼!

    【讨论】:

    • 感谢@Mark,它运行良好。现在我不明白为什么这个方法不在主线程中运行。
    • 这是一本非常有趣的读物,它让您对 iOS 和 OS X 中的线程/并发有一些了解developer.apple.com/library/prerelease/ios/documentation/…
    • 非常感谢您提供的信息和解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2020-08-26
    相关资源
    最近更新 更多