我正在尝试查看是否有正在进行的通话,但我在将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上进行了测试。
答案 0 :(得分:1)
这已在一个新项目中复制。提交了一份关于它的错误报告。