我正在使用Apple的SquareCam演示中的viewController类。我没有更改代码,除了创建一个UIView,在示例中通过storyboard / IB设置。还要在构建设置中指定从ARC中排除。
代码使用KVO做一些动画我在下面的removeObserver
行遇到了崩溃。
我可以轻松解决这个问题而不是使用KVO,但我想了解这个问题 - 而且KVO更好。有时代码示例中的KVO很难遵循。例如:在下面的代码段中,keyPaths
调用的addObserver/removeObserver
不同(在Apple的代码中)。它们不应该是一样的吗?
无论如何......如果有人有X光视力
- (void)teardownAVCapture
{
[videoDataOutput release];
if (videoDataOutputQueue)
dispatch_release(videoDataOutputQueue);
// CRASH HERE
[stillImageOutput removeObserver:self forKeyPath:@"isCapturingStillImage"];
[stillImageOutput release];
[previewLayer removeFromSuperlayer];
[previewLayer release];
}
//观察者在这里设置:
stillImageOutput = [AVCaptureStillImageOutput new];
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext];
答案 0 :(得分:6)
我在尝试重新拍摄照片时也遇到了这个问题,我的临时解决方案是rem代码
[stillImageOutput removeObserver:self forKeyPath:@"isCapturingStillImage"];
并尝试致电
[session stopRunning]
答案 1 :(得分:4)
我认为它只不过是SquareCam中的拼写错误并使用:
[stillImageOutput removeObserver:self forKeyPath:@"capturingStillImage"];
答案 2 :(得分:1)
如果我没错?
isCapturingStillImage
和capturingStillImage
值应匹配。
如果应用程序找不到匹配的观察者,那么它就会崩溃..
希望这会有所帮助..