私のアプリケーションは、一連の処理メソッドを1日1回実行するか、一連のタスクを実行するためのローカル通知を受信したときに実行し、期待どおりに機能しています。
タスクを実行するためにAppDelegateから送信された通知を受信すると、アニメーションを開始するビューにActivityIndicatorを追加してみました。ただし、画面が暗くなり、処理が行われず、アクティビティインジケータが表示されないだけです。画面を暗くするインジケーターとサブビューは、アプリの他の場所で使用されており、確実に機能しています。通知が原因でアプリがハングし、他のメソッドの呼び出しに進まないため、アプリが完了しないことが関係していると思います。
これは、ビューコントローラーのアクティビティインジケーターを開始するために毎日の処理メソッドが呼び出される直前に呼び出されるアプリデリゲートの通知であり、2番目の通知はビューコントローラーにサブビューを削除するように通知します。
このメソッドはAppDelegateにあります。
- (void)GoForRankingAndSMProcessing{
[[NSNotificationCenter defaultCenter] postNotificationName:@"ranking" object:self];
RankingAndSMProcess *process = [RankingAndSMProcess alloc];
[process DoRankingAndSocialMediaProcessing];
[process release];
[[NSNotificationCenter defaultCenter] postNotificationName:@"rankingDone" object:self];
}
これは別のビューで取得され、通知はで設定されviewDidLoad
ます。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workingWhileRanking:) name:@"ranking" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(workingFinishedRanking:) name:@"rankingDone" object:nil];
そして、それらはそのビューでこれらのメソッドを呼び出します。
-(void)workingWhileRanking:(NSNotification *) notification{
loading = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
loading.opaque = NO;
loading.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.6f];
indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[indicator setHidesWhenStopped:YES];
indicator.center = self.view.center;
[indicator startAnimating];
[self.view addSubview:loading];
[self.view addSubview:indicator];
}
-(void)workingFinishedRanking:(NSNotification *) notification{
[indicator stopAnimating];
[indicator removeFromSuperview];
[indicator release];
[loading removeFromSuperview];
[loading release];
}
半透明のサブビューが表示されたら通知を送信する必要がありますが、どの処理メソッドも呼び出されていないようであるため、アプリを強制的に閉じるまでビューは完全にロックアウトされます。
通知を送信すると、アプリケーションの起動シーケンスの現在のフローが変更され、クラス内のコードの実行を継続できなくなりますか?または、完全に間違った方法で処理する舞台裏で表示するアクティビティインジケーターを追加しようとしましたか?