gpt4 book ai didi

ios - 长期存在的 CTCallCenter 实例显示没有调用并且从不调用事件处理程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:08:48 24 4
gpt4 key购买 nike

我在启动后创建了一个 CTCallCenter 实例 (alloc/init)。永远不会调用事件处理程序(既不是 NSLog 也不是 breakpoint 触发)。如果我稍后询问有关当前通话的信息​​,它会返回 nil。如果我同时调用 [[[CTCallCenter alloc] init] currentCalls] 然后它会返回调用。

作为一个例子,当一个调用处于事件状态时(我将应用程序带回前台,稍后触发一个计时器)这里是一个显示长期存在的 CTCallCenterNSLog实例,它为 currentCalls 返回的内容以及新的 transient 实例返回的内容:

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

(null)

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

)}

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

最佳答案

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

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

关于ios - 长期存在的 CTCallCenter 实例显示没有调用并且从不调用事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com