captureStillImageAsynchronouslyFromConnection: stillImageConnection completionHandler no siempre se llama

Descargué la demo de AVCam desde el sitio de Apple y traté de agregar una simple pantalla de inicio (agregué un StartViewController. {H, m, nib}) con un button que luego lanzaría la demostración de AVCam. El código del button es el siguiente (todo lo demás es solo el material pnetworkingeterminado creado por xcode):

-(IBAction) btnClicked:(id) sender { viewController = [[AVCamViewController alloc] initWithNibName: @"AVCamViewController" bundle:nil]; [UIView beginAnimations:@"flipping view" context:nil]; [UIView setAnimationDuration:1]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; [self.view addSubview:viewController.view]; [UIView commitAnimations]; } 

De alguna manera después de agregar esta punta, tomar una foto no funciona todo el time (a veces ninguna image termina en el rollo de la camera). Agregué algunas declaraciones de logging para capturar StillImage en captureStillImageAsynchronouslyFromConnection: stillImageConnection completionHandler y noté que este completingHandler no siempre se llama. Lo extraño es que funciona un poco del time. ¿Mi conjetura es que estoy haciendo algo mal pero no estoy seguro de qué? Estoy probando esto en un iPhone con 4.2.1.

Asegúrese de que AVCaptureSession esté ejecutando cuando llame a captureStillImageAsynchronouslyFromConnection:stillImageConnection

Bueno, yo estaba enfrentando un problema similar en el que, mediante la captureStillImageAsynchronouslyFromConnection:stillImageConnection estaba generando una exception de que la connection pasada no es válida. Más tarde, me di count de que cuando hice las properties para la session y stillImageOutPut para retener valores, el problema se resolvió.

Para mí, este problema SOLO sucedió en un solo núcleo iPhone 4 y cuando trato de capturar imágenes fijas con AVCaptureSessionPresetHigh.

Probé AVCaptureSessionPresetPhoto y este problema desapareció. Pero no necesito fotos a tamaño completo, así que busqué otra solución.

Pongo captureStillImageAsynchronouslyFromConnection en la queue principal. Algo como esto

 dispatch_async(sessionQueue) { // do whatever before capturing dispatch_async(dispatch_get_main_queue) { captureStillImageAsynchronouslyFromConnection { // do whatever after capturing } } } 

No estoy seguro de por qué existe este problema y no estoy seguro de por qué esto puede evitarlo. Pero espero que esto pueda ayudar a alguien.