Wpadłem na podobny problem. Wywołanie stopRunning spowoduje zatrzymanie aplikacji na 8 do 10 sekund.
W końcu wyśledziłem problem do tego: Nazwałem stopRunning na wątku innym niż główny wątek. Ten wtórny wątek został użyty do wszystkich transakcji do AVCaptureSession. Wystąpił problem, ponieważ po wysłaniu wywołania stopRunning zablokowałem główny wątek oczekujący na zakończenie. Niestety stopRunning wysyła coś do głównego wątku i bloków czekających na zakończenie. Sprawa stopRunning kończyła się i upłynęła limit czasu i zgłoszono błąd w wywołaniu zwrotnym - (void) onRuntimeError: (NSNotification *) n: Domena błędu = AVFoundationErrorDomain Code = -11819 "Nie można ukończyć działania" UserInfo = 0x19e43c90 {NSLocalizedRecoverySuggestion = Spróbuj ponownie później., NSLocalizedDescription = Nie można ukończyć działania}
Rozwiązaniem w moim przypadku było po prostu zablokowanie głównego wątku po wywołaniu stopRunning. Na szczęście dla mnie to było łatwe (i coś, co Apple mniej lub bardziej zaleca).
Zauważyłem wariacje na ten temat w innych kwestiach, a rozwiązaniem zawsze była zmiana kodu. Mam nadzieję, że pozwoli to lepiej zrozumieć, dlaczego występuje problem.
Spróbuj tego: http: //stackoverflow.com/questions/11905505/avcapturesession-stop-running-take-a-long-long-time – nickcheng
Tak, wydaje się, że to rozwiązuje problem. Gdy dodasz go jako odpowiedź, zaakceptuję to. –