MKMapView не загружается при вызове по NSThread? - PullRequest
0 голосов
/ 15 апреля 2010

Я создаю MKMapView в методе с именем «generateMap». Изнутри 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]», чтобы экран переключал MapView, прежде чем это будет сделано с generateMap. В противном случае мы не увидели бы счетчик и увидели бы только пустой экран до тех пор, пока не был создан generateMap.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2010

Не думаю, что рекомендуется обновлять интерфейс через что-либо кроме основного потока.

Что происходит, когда вы пытаетесь запустить -generateMap в главном потоке с -performSelectorOnMainThread:withObject:waitUntilDone:?

Например:

[self performSelectorOnMainThread:@selector(generateMap) withObject:nil waitUntilDone:YES];
0 голосов
/ 16 апреля 2010

Прежде всего, я могу увидеть метод generateMap? Во-вторых, более подходящий способ выполнить селектор - сказать


[self performSelector:@selector(generateMap)];

...