我的iOS obj-c项目面临一个相当特殊的问题,我无法解决这个问题。我正在启动一个AVCaptureSession并设置一个观察者来观察isRunning属性。然后观察者调度到主线程并启用UIButton ...但是即使在会话开始运行时立即调用观察者,主线程上的任务有时会延迟9-10秒,有时会立即触发。 这是代码的一部分:
-(void)addObservers {
[self.session addObserver:self forKeyPath:@"running" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString: @"running"]) {
NSLog(@"CaptureSession is running");
dispatch_async(dispatch_get_main_queue(), ^{
self.takePictureButton.enabled = self.session.isRunning;
NSLog(@"Button is enabled: %i", self.session.isRunning);
});
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
这是输出:
2018-06-15 10:45:41.126595+0200 Scan[699:81561] CaptureSession is running
2018-06-15 10:45:50.141507+0200 Scan[699:81541] Button is enabled: 1
我感谢任何建议。我可以用不同的方法解决这个问题,但我想了解可能导致这种行为的原因。