崩溃删除keyValue观察者(使用Apple SquareCam示例代码)

时间:2012-05-01 21:16:02

标签: ios ios5 key-value-observing

我正在使用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];

3 个答案:

答案 0 :(得分:6)

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

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

并尝试致电

[session stopRunning]

答案 1 :(得分:4)

我认为它只不过是SquareCam中的拼写错误并使用:

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

答案 2 :(得分:1)

如果我没错?

isCapturingStillImagecapturingStillImage值应匹配。

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

希望这会有所帮助..