2015-01-04 69 views
10

可以從主線程執行segue嗎?可以從主線程執行一個segue嗎?

user.saveInBackgroundWithBlock { (success: Bool!, error: NSError!) -> Void in 
if success == false || error != nil { 
    println(error) 
} else { 
    self.performSegueWithIdentifier("jumpToMessagesViewController", sender: self) 
} 
} 

或者什麼是正確的方法來做到這一點?

回答

13

通常,全部可可和可可觸摸操作應該在主線程上完成。如果你不這樣做,你可能會遇到像UI沒有正確更新並且有時甚至崩潰的問題。所以,你應該換您的來電performSegueWithIdentifier

DispatchQueue.main.async { 
    self.performSegue(withIdentifier: "jumpToMessagesViewController", sender: self) 
} 

UIKit中(可可觸摸),在後臺線程調用UI的東西是一個肯定的方式在昔日崩潰。從iOS 4(IIRC)開始,現在很多東西都是「線程安全的」,因爲應用程序不會再崩潰,但某些操作在後臺線程中執行時會被忽略。因此,執行代碼時,主線程上的UI對象會出現混亂,這總是一個好主意。

我不確定AppKit(Cocoa)的線程安全性。我知道在後臺線程上調用AppKit的東西可能會導致應用程序崩潰,但我不知道這是否是真的。最好不要抱歉,並在主線程上調用你的UI對象。

相關問題