设置callEventHandler后,CTCallCenter不会更新currentCalls属性

时间:2014-10-16 12:28:13

标签: ios objective-c iphone

我正在尝试查看是否有正在进行的通话,但我在将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;。它有合成的二传手和吸气剂。它在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必须在主队列上进行alloc-init'd。从那以后,我一直小心翼翼地只使用我的app delegate中的dispatch_async在主队列上调用我自己的init

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

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

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

1 个答案:

答案 0 :(得分:1)

这已在一个新项目中复制。提交了一份关于它的错误报告。