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 に答える