0

バックグラウンドで実行するように設定したスレッドを監視しようとしています。実行が終了したらアラートを受け取る必要があります。

- (IBAction) btnGreaterTen_clicked :(id)sender{

    self.searchDistance = [NSNumber numberWithDouble : 10];

    CGRect frame = CGRectMake (120.0, 185.0, 80, 80);

    activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;


    [navigationUpdateFromDetail.window addSubview: activity];


    [activity startAnimating];


    thread = [[NSThread alloc] init];
    [thread start];

[self performSelectorInBackground: @selector (getSetDisplay) withObject:nil];         

if(thread.isFinished == YES){
    [activity stopAnimating];
}
 }

上記のコードは、最終結果を達成するために別の設定を試みた後に得たものです。そのメソッド「getSetDisplay」を使用してネットから情報を取得しながら、UIActivityIndi​​catorをアニメーション化しようとしています。

機能は良いのですが、Activity インジケーターが出ていませんでした。バックグラウンド スレッドでプロセスを実行し、メイン スレッドでアニメーションを実行する必要があると言われました。私の問題は、このプロセスがいつ完了してアクティビティインジケーターを停止するかをどのように監視するかです。前もって感謝します

4

2 に答える 2

4

別の角度から問題を検討する必要があります。「メイン スレッド」を実行し続け、「セカンダリ スレッド」が作業を終えたときにメイン スレッドのセレクターを呼び出せるようにする必要があります。

これを実現するには、performSelectorOnMainThreadメソッドを使用して、セカンダリ スレッドから呼び出す必要があります。その原型は- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait. 「仕上げ」コードをメソッドに入れ、次のようにする必要があります。

[self performSelectorOnMainThread:@selector(doneDoingWork) withObject:nil waitUntilDone:NO];
于 2009-12-31T10:51:34.553 に答える
1

君たちありがとう。マイクと彼の上記のコメントのおかげで、ようやく解決策が見つかりました。

- (IBAction) btnGreaterTen_clicked :(id)sender{

self.searchDistance = [NSNumber numberWithDouble : 10];


[activity startAnimating];

NSLog(@" search value after change %@", [searchDistance description]);

[self performSelectorInBackground: @selector (getSetDisplay) withObject: nil];
}

メインスレッドで実行される「[activity startAnimating]」でアクティビティインジケーターを開始しました。次に、「performSelectorInBackground」を使用してバックグラウンド スレッドでメソッドを開始しました。そして、「getSetDisplay」メソッドの最後に、次のステートメントを配置しました。

[activity performSelectorOnMainThread: @selector (stopAnimating) withObject:nil   waitUntilDone:NO];

これは、メイン スレッドで動作している [アクティビティ停止アニメーション] の別の言い方です。

回答してくれたすべての人に感謝します。

于 2010-01-03T00:21:27.523 に答える