1

我正在使用 Apple 的 SquareCam 演示中的 viewController 类。除了创建一个 UIView 之外,我没有更改代码,该示例在示例中是通过情节提要/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];
4

3 回答 3

6

我在尝试重新拍照时也遇到了这个问题,我的临时解决方案是 rem that code

[stillImageOutput removeObserver:self forKeyPath:@"isCapturingStillImage"];

并尝试打电话

[session stopRunning]
于 2012-11-30T09:00:56.737 回答
4

我将其视为 SquareCam 中的一个错字并使用:

[stillImageOutput removeObserver:self forKeyPath:@"capturingStillImage"];
于 2013-06-04T12:00:42.003 回答
1

如果我没记错的话

isCapturingStillImagecapturingStillImage值应该匹配。

如果应用程序找不到匹配的观察者,那么它就会崩溃..

希望这可以帮助..

于 2012-05-01T22:50:12.373 回答