По сути, у меня есть два следующих метода, которые подталкивают один и тот же контроллер представления вызовов _vcCall. pushViewController отлично работает с методом on_calling, но не работает с on_incoming_call. Я уверен, что self.navigationController не равен нулю, и _vcCall тоже не равен нулю. Я распечатал и navigationController, и _vcCall в обоих методах, и все они имеют один и тот же адрес. Я даже попытался создать новый контроллер представления в on_incoming_call, но он все еще не работает.
У меня есть только одна кнопка на экране, и она нажимает на контроллер представления вызовов при нажатии. когда запускается метод on_calling, он успешно нажимает на _vcCall, но когда запускается on_incoming_call, он ничего не делает, но блокирует меня от нажатия на кнопку Call. похоже, что на текущий контроллер представления нажимается прозрачная страница.
Кто-нибудь может помочь, пожалуйста?
- (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;
}
}
}
1 ответ
Убедитесь, что код не вызывается в фоновом потоке, поскольку все, что связано с пользовательским интерфейсом, должно выполняться в основном потоке.
Я не уверен, но вызов push для того же экземпляра контроллера представления может быть виновником. Попробуйте настраивать новый экземпляр каждый раз, когда вы нажимаете, а не :) делать это в методе ViewDidLoad.
Похожие вопросы
Новые вопросы
ios6
iOS 6 была анонсирована Apple 11 июня 2012 года и выпущена 19 сентября 2012 года. Она работает на всех iPhone от 3GS и выше.