长期存在的CTCallCenter实例不显示任何调用,也从不调用事件处理程序

时间:2013-02-05 07:02:04

标签: ios objective-c xcode

我在启动后创建了CTCallCenter实例(alloc / init)。永远不会调用事件处理程序(NSLog也不breakpoint。如果我稍后询问当前的调用它返回nil。如果我同时拨打[[[CTCallCenter alloc] init] currentCalls],那么它会返回呼叫。

作为示例,当一个调用处于活动状态时(我将应用程序带回到前台并且计时器稍后被触发)这里有一个NSLog显示长期存在的CTCallCenter实例,它返回的是什么currentCalls以及新的瞬态实例返回的内容:

CTCallCenter(0x1e5639c0): {
    server_connection: 0x1e5640e0   currentCalls: {(
)}  callEventHandler: 0xa0c90
}

(null) 

{(
    CTCall (0x1e5a0fb0) {
    callState: [CTCallStateIncoming]
    Call ID: [1EB2A082-4A12-48C2-A76C-2244F8F402EE]
}

)}

显然有一个处理程序注册,并且长期存在的实例认为没有调用。我很高兴总是使用瞬态实例来获取调用列表,但我真的需要触发事件处理程序。

1 个答案:

答案 0 :(得分:7)

我找到了答案。 [[CTCallCenter alloc] init]必须在主队列中运行。我在自定义串行调度队列中运行它。据推测,CTCallCenter代码正在对当前队列执行某些操作,或者可能需要运行循环。

如果你在主队列之外执行alloc / init,那么如果立即调用currentCalls它将是正确的但是数据永远不会更新,事件处理程序也不会触发。文档中没有提到这一点,也没有提到errors或引发异常。