1

私はこれまでで最も奇妙なバグを経験しています。iPhoneでアプリを実行しています。次のコードがあります。

self.callCenter = [[CTCallCenter alloc] init];
    [self.callCenter setCallEventHandler: ^(CTCall* call) {
        if ([call.callState isEqualToString: CTCallStateDisconnected]) {
            NSLog(@"call ended");
            dispatch_sync(dispatch_get_main_queue(), ^(void) {
                NSLog(@"on main thread!");
                NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
                [userInfo setValue:weakSelf.recordRef forKey:kContactKey];
                [[NSNotificationCenter defaultCenter] postNotificationName:kCallEndedNotification object:nil userInfo:userInfo];
            });
        }
    }];

何らかの理由で、このコードブロックは呼び出されません。しかし、ifステートメントにブレークポイントを設定すると、それが呼び出されます。なぜこれが起こっているのか考えていますか?

4

1 に答える 1

0

これは、iOSSKD6のバグだと思います。イベント「CTCallStateDisconnected」は、アプリがバックグラウンドにあるときにすぐに呼び出される必要があるため、まったく呼び出されません。そこにブレークポイントを置いても大丈夫なのは、イベントが呼ばれる時間のせいだと思います。ブレークポイントで停止した場合でも、通話は継続され、アプリがフォアグラウンドにあるときにイベントが呼び出されます。

ここを見てください、iOS5ではこれは機能していました: setCallEventHandler test

于 2013-01-04T15:31:28.773 に答える