我已經搜索了類似的問題,但是我沒有找到答案,請考慮我的情況。MKMapView必須在主線程上初始化。我如何管理線程?
我有兩個ViewControllers。第一個被用作「啓動畫面」。它從服務器獲取數據,並對下一個vc執行segue。一切都在主線上完成。
override func viewDidLoad() {
super.viewDidLoad()
updatePickerInfoBeforeStart()
}
func updatePickerInfoBeforeStart() {
self.retrieveCurrency{ [weak self] currencies in
Currency.shared.currencies += currencies
self?.isReadyToGo = true
self?.performSegue(withIdentifier: "LoadCurrency", sender: nil)
}
}
第二個負責所有的操作。我剛纔說MapKitView,並創建一個IBOutlet它,當我收到這樣的錯誤
*** Terminating app due to uncaught exception 'NSRangeException', reason: '<MKMapView: 0x7ff662021200; frame = (0 0; 0 0); transform = [0, 0, 0, 0, 0, 0]; alpha = 0; opaque = NO; layer = (null)> initWithCoder:: MKMapView must be initialized on the main thread.'
看來,從第一個VC perfoming SEGUE到第二中,但我不知道,什麼是錯的實際。 此外我有一個奇怪的錯誤 - 第二個vc上的第二個vc上的加載時間,不用於綁定數據,第二個vc約爲30秒。
可以請你添加的viewDidLoad代碼,第二個視圖控制器? – hasan83
另外,你是否100%肯定'retrieveCurrency'正在調度它的完成處理程序到主隊列?完成處理程序(例如使用'URLSession'完成處理程序的東西)在後臺線程上運行並不罕見。如果使用Swift 3,在閉包中可以添加一行說'dispatchPrecondition(condition:.onQueue(.main))'來確保。 – Rob