我正在一个名为“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];
}
这允许我有一个微调器(UIActivityIndicator)并根据需要加载MKMapView。我设置“waitUntilDone:No]”,以便屏幕在使用generateMap完成之前切换MapView。否则,我们将看不到微调器,并且只有在完成generateMap之后才会看到空白屏幕。
答案 0 :(得分:0)
首先,我能看到generateMap
方法吗?其次,执行选择器的更充分的方法是说
[self performSelector:@selector(generateMap)];
答案 1 :(得分:0)
我认为除了主线程之外,尝试更新UI是不可取的。
当您尝试使用-generateMap
在主线程上运行-performSelectorOnMainThread:withObject:waitUntilDone:
时会发生什么?
例如:
[self performSelectorOnMainThread:@selector(generateMap) withObject:nil waitUntilDone:YES];