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

标签 ios multithreading mapkit

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

我有两个 ViewController。第一个用作“启动画面”。它从服务器获取数据,并执行到下一个 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 的 perfoming segue 期间,但我不知道,实际上出了什么问题。 此外,我还有一个奇怪的错误——某些对象在第二个 vc 上的加载时间,不用于将数据绑定(bind)到它们,在第二个 vc 上加载时间约为 30 秒。

最佳答案

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

Move your code to viewWillAppear method.

关于ios - MKMapView 必须在主线程上初始化。我如何管理线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373839/

相关文章:

java - 如何同步对不同类成员的访问?

.net - 如何同步锁定共享整数

java - 在游戏中的多个线程之间共享对象

swift map 套件 : need to move map to show annotations after using addAnnotations()

ios - 如何在 MapKit 中绘制带有外边框的叠加层?

Ios 本地化不起作用

iOS ContactsUI 框架权限

ios - CGContextRef 无法与 @IBDesignable 一起使用(错误 :The agent Crashed)

ios - 我可以将 UIGraphics CurrentContext 设置为 iOS 中的 Oriented 属性吗

ios - 带有 UISearchBar 的 MapKit