必须在主线程上初始化MKMapView。我该如何管理线程?

时间:2017-02-21 17:16:40

标签: ios multithreading mapkit

我搜索过类似的问题,但我没有找到答案,请考虑我的情况。

我有两个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到第二个vc的演出期间,但我不知道,实际上有什么问题。 此外,我有一个奇怪的错误 - 在某些对象的第二个vc上的加载时间,不用于将数据绑定到它们,在第二个vc上大约30秒。

1 个答案:

答案 0 :(得分:1)

我想我知道你们中的一个错误。您无法在viewDidLoad中执行segue,因为当前视图尚未显示。

  

将您的代码移至viewWillAppear方法。