1

0.1f秒後に起動するには、いくつかのコードをviewDidAppearから新しいセレクターに移動する必要があります。だから私は次のようなことをしました:

-(void) viewDidAppear:(BOOL)animated{
    [self performSelector:@selector(startShowing) withObject:nil afterDelay:0.1f];      
}

-(void) startShowing{
    NSLog(@"start Showing");
    ............
}

アプリケーションを起動しても何も起こらず、「表示開始」が表示されません。ビューを変更してから最初のビューに戻ると、機能しています。

誰もが理由を知っていますか?

4

1 に答える 1

2

問題は、遅延が、アプリケーションの起動が完了するまでにインスタンス化される NSRunLoop に依存する NSTimer の基になる実装に依存していることです。

スレッディングプログラミングガイドから:

「[a]スレッドでセレクターを実行する場合、ターゲットスレッドにはアクティブな実行ループが必要です。作成するスレッドの場合、これは、コードが明示的に実行ループを開始するまで待機することを意味します。ただし、メインスレッドは独自の実行ループを開始するため、アプリケーションがアプリケーション デリゲートの applicationDidFinishLaunching: メソッドを呼び出すとすぐに、そのスレッドで呼び出しの発行を開始できます。実行ループは、ループの反復ごとに 1 つを処理するのではなく、キューに入れられたすべての実行セレクター呼び出しをループごとに処理します。

そのため、applicationDidFinishLaunching: がまだ起動しているかどうかを確認してください。あなたはアプリケーションを起動したばかりだと言いました。まだ打ち上げが終わっていないに違いない。

それが問題であれば、いくつかの方法で修正できます。私にとって最も簡単なのは、applicationDidFinishLaunching から performSelector:withObject:afterDelay: を呼び出すことです。

于 2011-10-18T02:33:14.710 に答える