我正在尝试查看是否有任何正在进行的 call ,但是在将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停止更新其应有的方式。更准确地说,我(对自己)打的电话一直在堆积,因此,如果我拨打并挂断了三个电话,我将得到三个处于“拨号”状态的CTCall的打印输出。 newCenter可以正常工作。

我要做的就是打破它:
- (void)trackCallStateChanges
{
    self.callCenter.callEventHandler = ^(CTCall *call)
    {

    };
}

我遇到的回答是,必须在主队列上对CTCallCenter进行alloc-initd初始化。从那以后,我一直在使用从我的应用程序委托中使用dispatch_async仅在主队列上调用自己的init:
        dispatch_async(dispatch_get_main_queue(), ^{
            self.myClass = [[MyClass alloc] init];
            [self.myClass trackCallStateChanges];
        }

我的checkForCurrentCalls稍后会在applicationWillEnterForeground中调用。

我不明白为什么只设置callEventHandler -block会破坏它。
一切都在iPhone 5 iOS 7.1.2上进行了测试。

最佳答案

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

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

10-09 02:16