元の質問が未回答になった後、より簡潔でフォーカスされた質問で再投稿する。また、研究の翌日に問題についてのより多くの洞察を追加する:
私のアプリケーションデリゲート(didFinishLaunching
)では、CTCallCenter
にcallEventHandler
を設定しました。
アイデアは、callStateが変更されたときに、userInfo dictで通知を投稿するということです
call.callState
を含む。私の見解では、私はこの通知を観察し、
userInfo
dictにはCTCallDisconnected
の値が含まれています。ビューを非表示にしたいと思います。
私が抱えている問題は、隠れていない側面がほぼ完全に、〜7秒かかっていることです。
他のすべてが正常に動作しています。私はNSLog
の前後に隠れているので、これを知っています。
これらのログはすぐに表示されますが、ダーネットされたビューは7秒間表示されます。
ここに私のコードです:
appDidFinishLaunching:
self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall* call) {
// anounce that we've had a state change in our call center
NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:self userInfo:dict];
};
ユーザーが電話番号をダイヤルするボタンをタップすると、この通知を聞きます。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ctCallStateDidChange:) name:@"CTCallStateDidChange" object:nil];
次に、ctCallStateDidChangeで:
- (void)ctCallStateDidChange:(NSNotification *)notification
{
NSLog(@"121");
NSString *callInfo = [[notification userInfo] objectForKey:@"callState"];
if ([callInfo isEqualToString:CTCallStateDisconnected]) {
NSLog(@"before show");
[self.view viewWithTag:kNONEMERGENCYCALLSAVEDTOLOG_TAG].hidden = NO;
NSLog(@"after show");
}
}
私は上記のコードサンプルのif条件に問題を追跡しました:
if ([[userInfo valueForKey:@"userInfo"] valueForKey:@"callState"] == CTCallStateDisconnected) {
私が単にそれを次のように置き換えると:
if (1 == 1) {
すぐにビューが表示されます。
つまり、これらのNSLog
ステートメントはすぐにログに記録されていますが、ビューは
それは隠れていない。どのようにその状態はブロックの一部だけを引き起こす可能性があります
すぐに実行し、残りの部分は〜7秒待ちますか?
ありがとう!