我正在尝试查看是否有任何正在进行的 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/