gpt4 book ai didi

ios - 在我设置 callEventHandler 后,CTCallCenter 不更新 currentCalls 属性

转载 作者:行者123 更新时间:2023-11-29 12:35:42 25 4
gpt4 key购买 nike

我正在尝试查看是否有任何正在进行的调用,但我无法将 CTCallCenter 的实例保留为属性。这基本上是我现在正在调试的内容(所有内容都在 MyClass 中):

-(void)checkForCurrentCalls
{
CTCallCenter *newCenter = [[CTCallCenter alloc] init];
if (newCenter.currentCalls != nil)
{
NSLog(@"completely new call center says calls in progress:");
for (CTCall* call in newCenter.currentCalls) {
NSLog(call.callState);
}
}
if (self.callCenter.currentCalls != nil) {
NSLog(@"property-call center says calls in progress:");

for (CTCall* call in self.callCenter.currentCalls) {
NSLog(call.callState);
}
}
}

我的 self.callCenter 是一个 @property (nonatomic, strong) CTCallCenter *callCenter;。它合成了setter和getter。它在 MyClass 的 init 方法中初始化:

- (id)init
{
self = [super init];
if (self) {
self.callCenter = [[CTCallCenter alloc] init];
}
return self;
}

如果我在 checkForCurrentCalls 之前调用我的另一个方法,那么我的 self.callCenter.currentCalls 将停止更新它应该的方式。更准确地说,我(对自己)打的电话不断堆积,所以如果我拨了三个电话又挂了电话,我会打印出三个处于“拨号”状态的 CTCalls。 newCenter 按预期工作。

我要做的就是调用这个:

- (void)trackCallStateChanges
{
self.callCenter.callEventHandler = ^(CTCall *call)
{

};
}

我遇到的答案说 CTCallCenter 必须在主队列上分配初始化。从那以后,我一直注意只在主队列上调用我自己的 init,使用我的应用程序委托(delegate)中的 dispatch_async:

        dispatch_async(dispatch_get_main_queue(), ^{
self.myClass = [[MyClass alloc] init];
[self.myClass trackCallStateChanges];
}

稍后在 applicationWillEnterForeground 中调用我的 checkForCurrentCalls

我不明白为什么只设置 callEventHandler block 会破坏它。一切都在 iphone 5 ios 7.1.2 上测试。

最佳答案

这已在新项目中复制。提交了错误报告。

关于ios - 在我设置 callEventHandler 后,CTCallCenter 不更新 currentCalls 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26404449/

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