1

Apple の SquareCam デモの viewController クラスを使用しています。例ではストーリーボード/IB を介して設定されていた UIView を作成する以外は、コードを変更していません。また、ビルド設定で ARC から除外するように指定します。

コードは KVO を使用していくつかのアニメーションを実行しremoveObserverます。以下の行でクラッシュします。

KVOを使用せずにこれを簡単に回避できますが、問題を理解したいと思います-そしてKVOをより良くします。コード例の KVO を理解するのが難しい場合があります。例: 以下のスニペットではkeyPathsaddObserver/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

私は写真を撮り直そうとしたときにもこの問題に遭遇します、私の一時的な解決策はそのコードをレムすることです

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

と電話してみてください

[session stopRunning]
于 2012-11-30T09:00:56.737 に答える
1

私が間違っていなければ

isCapturingStillImagecapturingStillImage値が一致する必要があります。

アプリが一致するオブザーバーを見つけることができなかった場合、クラッシュします..

お役に立てれば..

于 2012-05-01T22:50:12.373 に答える