在NSThread上调用MKMapView时不加载?

时间:2010-04-15 19:55:35

标签: iphone mkmapview nsthread

我正在一个名为“generateMap”的方法中创建一个MKMapView。从viewDidLoad里面,这可以工作:

[self generateMap];

但是这会导致地图快速加载然后消失,只留下空白的灰色网格:

[NSThread detachNewThreadSelector:@selector(generateMap) toTarget:self withObject:nil];

当我通过线程调用方法时,为什么会出现这种情况?


我最终这样做了:

-(void)viewDidLoad {
[NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];
[self performSelectorOnMainThread:@selector(generateMap) withObject:nil waitUntilDone:NO];
[super viewDidLoad];
}

这允许我有一个微调器(UIActivityIndi​​cator)并根据需要加载MKMapView。我设置“waitUntilDone:No]”,以便屏幕在使用generateMap完成之前切换MapView。否则,我们将看不到微调器,并且只有在完成generateMap之后才会看到空白屏幕。

2 个答案:

答案 0 :(得分:0)

首先,我能看到generateMap方法吗?其次,执行选择器的更充分的方法是说


[self performSelector:@selector(generateMap)];

答案 1 :(得分:0)

我认为除了主线程之外,尝试更新UI是不可取的。

当您尝试使用-generateMap在主线程上运行-performSelectorOnMainThread:withObject:waitUntilDone:时会发生什么?

例如:

[self performSelectorOnMainThread:@selector(generateMap) withObject:nil waitUntilDone:YES];