Apple の SquareCam デモの viewController クラスを使用しています。例ではストーリーボード/IB を介して設定されていた UIView を作成する以外は、コードを変更していません。また、ビルド設定で 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];