过去5个小时我正在尝试修复此错误。我有两个VC。在第一个VC中有一个触发segue的轻击手势。
@IBAction func addMaterial(sender: AnyObject){
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("addNewMaterialSegue", sender: self)
}
}
第二个VC:
override func viewDidLoad() {
dispatch_async(dispatch_get_main_queue()) {
super.viewDidLoad()
print("viewDidLoad")
}
}
override func viewWillAppear(animated: Bool) {
print("viewWillAppear")
super.viewWillAppear(animated)
}
从viewDidLoad到viewWillAppear需要大约5个秒。我知道I'm not the first to ask this question,但我找不到与“创建和呈现视图控制器应该在主线程上完成”不同的解决方案,而不是我的情况。
答案 0 :(得分:6)
删除dispatch_async。
您使用dispatch_async告诉处理器的是
长话短说,删除dispatch_async,你的延迟就会消失。
答案 1 :(得分:4)
删除示例代码中的dispatch_async。你已经在主要队列。
修改强>
好吧,我要道歉。我已经尝试过您的代码,但找不到任何问题。乍一看,您在主队列中已经执行的dispatch_async调用看起来非常可疑。我仍然认为他们必须被删除。但它们不会导致您遇到的问题。即使您将调用放在dispatch_async中,视图也会快速打开,没有任何延迟。所以,还有另一个问题。也许你可以提供更多信息,更多代码或最佳:整个项目。那么应该很容易找到问题。
如果您无法放弃该项目,可以进行此项检查:
print("Current thread \(NSThread.currentThread())")
将其放在每个相关功能的每个条目上。让我们看看当前发生的各种情况。