必须在主线程上初始化MKMapView

时间:2012-01-10 14:20:22

标签: ios cocoa-touch mkmapview

我是iphone的新手,使用MKMapView在我的应用程序中加载谷歌的地图。但它抛出异常“MKMapView必须在主线程上初始化。”那么我应该在哪里初始化我的MKMapView对象。我正在viewDidLoad()初始化。

提前感谢.....

3 个答案:

答案 0 :(得分:3)

它没有在主线程上创建的原因是2个选项之一

  1. 创建它的视图位于其中一个后台线程
  2. 您正在呼叫performSelectorInBackground:来创建您的观点
  3. 在主线程调用performSelectorOnMainThread:

    上执行功能

    偏离主题:如果函数需要多于1个参数,请将其更改为NSDictionary并将所有设置加载到Dictionary中并将其传递到例如

    NSDictionary *params = ...... //load your parameters into here
    
    [myMapView performSelectorOnMainThread:@selector(initMap:)
                                    withObject:params
                                 waitUntilDone:YES];
    

    另请阅读以下FirstSecond以更好地了解iOS中的多线程

答案 1 :(得分:0)

使用Swift 3,以下内容将确保您的函数在主线程上运行。 OperationQueue.main.addOperation {“你的segue或函数调用”}

答案 2 :(得分:0)

我收到了这个错误:

  

MKMapView必须在主线程上初始化

当我尝试以这种方式更改自定义UITableViewCell的内容时:

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[myIndexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];

The UITableviewCell in the corresponding indexpath contained a MKMapView that I tried to change its region.

myTabelViewCell *cell = [self.tableView cellForRowAtIndexPath:myIndexPath];
[cell setContentWithLatitude:currentLatitude longitude:currentLongitude];

使用上面的代码而不是[self.tableView reloadData]来刷新一个单元格。