我在启动后创建了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]
}
)}
显然有一个处理程序注册,并且长期存在的实例认为没有调用。我很高兴总是使用瞬态实例来获取调用列表,但我真的需要触发事件处理程序。
答案 0 :(得分:7)
我找到了答案。 [[CTCallCenter alloc] init]
必须在主队列中运行。我在自定义串行调度队列中运行它。据推测,CTCallCenter
代码正在对当前队列执行某些操作,或者可能需要运行循环。
如果你在主队列之外执行alloc
/ init
,那么如果立即调用currentCalls它将是正确的但是数据永远不会更新,事件处理程序也不会触发。文档中没有提到这一点,也没有提到errors
或引发异常。