0

我正在一个名为“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 完成之前,我们将看不到微调器,只会看到一个空白屏幕。

4

2 回答 2

0

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


[self performSelector:@selector(generateMap)];

于 2010-04-15T20:00:49.680 回答
0

我认为不建议尝试通过主线程以外的任何方式更新 UI。

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

例如:

[self performSelectorOnMainThread:@selector(generateMap) withObject:nil waitUntilDone:YES];
于 2010-04-15T20:01:28.240 回答