アプリに3つの画面があります。最初はログインです。2つ目は検索で、3つ目はタスクの処理です。ログイン時に、Webサービスからデータを取得します。XML形式でデータを返します。したがって、データはかなり大きくなります。だから私はメインスレッドがフリーズするのを防ぐためにこのようなバックグラウンドスレッドでそのタスクを実行しています:
-(BOOL)loginEmp
{
.....some computation
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
[self getAllCustomerValues];
});
}
-(void)getAllCustomerValues
{
....more computation.Bring the data,parse it and save it to CoreData DB.
//notification - EDIT
NSNotification *notification =[NSNotification notificationWithName:@"reloadRequest"
object:self];
[[NSNotificationCenter defaultCenter] postNotification : notification];
}
//EDIT
//SearchScreenVC.m
- (void)viewDidLoad
{
....some computation
[self.customerActIndicator startAnimating];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(stopActivityIndicator)
name:@"reloadRequest"
object:nil];
}
- (void)stopActivityIndicator
{
[self.customerActIndicator stopAnimating];
self.customerActIndicator.hidesWhenStopped = YES;
self.customerActIndicator.hidden =YES;
NSLog(@"HIt this at 127");
}
したがって、ログインが成功したことを条件に、画面2に移動します。ただし、バックグラウンドスレッドはまだ処理中です(ログログ値があるためわかります)。ここ(2番目の画面)にアクティビティインジケーターが表示され、ユーザーが検索を開始するまで待つように指示します。では、どうすればよいですか?アクティビティインジケーターにバックグラウンドスレッドをリッスン/待機させるにはどうすればよいですか?さらに情報が必要な場合はお知らせください。ありがとうございます
編集:それに応じて編集しましたが、通知が呼び出されることはありません。getAllCustomerValuesの最後に通知を置き、SearchScreenのviewDidLoadでそれを使用しました。アニメーションを停止するための2番目の画面でのその通知は呼び出されません。私がしている間違いは何ですか?ありがとう
編集2:それで最終的にメソッドにヒットします。何がその方法を打ったのかわかりません。ブレークポイントを置きます。私はアニメーションをやめるように書いたが、そうはならなかった。私はhidesWhenStopppedを書き、両方をYESに隠しました。しかし、それでもアニメーションを続けます。どうすれば停止できますか?