基本的に、同じコール ビュー コントローラー _vcCall をプッシュする次の 2 つのメソッドがあります。pushViewController は on_calling メソッドでは正常に動作しますが、on_incoming_call では動作しません。self.navigationController が null ではなく、_vcCall も null ではないことは確かです。両方のメソッドで navigationController と _vcCall の両方を出力しましたが、それらはすべて同じアドレスを持っています。on_incoming_call で新しいビューコントローラーを作成しようとしましたが、まだ機能していません。
画面にはボタンが1つしかなく、クリックするとコールビューコントローラーにプッシュされます。on_calling メソッドがトリガーされると、_vcCall に正常にプッシュされますが、on_incoming_call がトリガーされると、Call ボタンをクリックするのをブロックするだけです。現在のView Controllerにプッシュされている透明なページがあるようです。
誰か助けてくれませんか?
- (void)viewDidLoad {
_vcCall = [[CallViewController alloc] init];
}
- (void) sipConnection: (SIPConnection *) connection on_calling: (NSDictionary *) userInfo {
NSLog(@"on_calling: navi: %@", self.navigationController);
[self.navigationController pushViewController:_vcCall animated:YES];
}
- (void)sipConnection:(SIPConnection *)connection on_incoming_call:(NSDictionary *)userInfo {
NSLog(@"on_incoming_call: navi: %@", self.navigationController);
[self.navigationController pushViewController:_vcCall animated:YES];
}
これは、on_calling が最初にトリガーされたときのコンソールの出力です。
on_calling: navi: <navViewController: 0x77779d0>
on_incoming_call: navi: <navViewController: 0x77779d0>
次の部分は、デリゲート メソッドが呼び出される場所です。
- (void) processCallMediaState: (NSDictionary *) userInfo {
int state = [[userInfo objectForKey: kState] intValue];
switch(state) {
case PJSIP_INV_STATE_CALLING: { // After INVITE is sent.
[self.delegate sipConnection:self on_calling:userInfo];
break;
}
case PJSIP_INV_STATE_INCOMING: {// After INVITE is received.
[self.delegate sipConnection:self on_incoming_call:userInfo];
break;
}
case PJSIP_INV_STATE_EARLY: {// After response with To tag.
break;
}
case PJSIP_INV_STATE_CONNECTING:{ // After 2xx is sent/received.
break;
}
case PJSIP_INV_STATE_CONFIRMED: { // After ACK is sent/received.
[self.delegate sipConnection:self on_respond:userInfo];
break;
}
case PJSIP_INV_STATE_DISCONNECTED: {
[self.delegate sipConnection:self on_ending:userInfo];
break;
}
}
}