【问题标题】:self.navigationController is not null but pushViewController is not workingself.navigationController 不为空,但 pushViewController 不工作
【发布时间】:2013-10-15 10:03:14
【问题描述】:

基本上,我有以下两种方法可以推送相同的调用视图控制器_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;
      }
   }
}

【问题讨论】:

  • 它在调用 on_incoming_call 时说了什么???我的意思是它是否在控制台中给出任何错误消息或其他内容?
  • 你从哪里调用这两个方法?
  • 我刚刚更新了我的帖子并添加了截图。它不显示任何错误消息。它什么也不做。这两个方法是由 sip 连接类调用的委托方法。而且我 200% 确定它们已被触发,因为我在方法中看到了这些消息。
  • 什么叫这些方法?你有更多我们可以使用的代码吗,肯定是别的,我看这段代码没有问题。
  • 我想不出任何相关的部分。这些调用方法是来自 SIPConnection 的委托方法。 pushviewcontroller 在一种方法中工作但在另一种方法中不起作用对我来说没有意义。

标签: ios6 uinavigationcontroller xcode4.5 pushviewcontroller


【解决方案1】:

检查代码没有在后台线程上被调用,因为与 UI 相关的任何事情都必须在主线程上运行。

我不确定,但在视图控制器的同一实例上调用 push 可能是罪魁祸首。每次推送时尝试设置一个新实例,而不是 :) 在 ViewDidLoad 方法中进行。

【讨论】:

  • 非常感谢。当我在主线程上执行 pushviewcontroller 时,我终于让它工作了。看起来 on_incoming_call 是由不同的线程调用的
  • 确保在主线程上调用特定方法的一种简便方法是包括: NSAssert([NSThread mainThread],@"不在主线程上!");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2011-04-02
  • 2011-09-29
  • 1970-01-01
相关资源
最近更新 更多