respuestas plataformas para móviles módulo examen desarrollo curso apps app ios objective-c xcode7

plataformas - iOS9: esta aplicación está modificando el motor de reproducción automática desde un subproceso en segundo plano, ¿dónde?



modulo 4 ios (3)

Edite el esquema de su proyecto y, en la acción Ejecutar , en la pestaña Diagnóstico , en Verificación de API de tiempo de ejecución , asegúrese de que la opción Pausa en los problemas esté marcada. Cuando se producen actualizaciones de la interfaz de usuario en segundo plano, la aplicación se detendrá.

Para buscar, el mensaje de error es:

Esta aplicación está modificando el motor de reproducción automática desde un subproceso de fondo, lo que puede provocar daños en el motor y bloqueos extraños. Esto provocará una excepción en una versión futura.

Sé que esto significa que se llama un código UIKit desde un subproceso en segundo plano, y sé que la solución es envolver el código en

dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });

Mi problema es encontrar dónde hacer eso, ya que ninguno de los rastros de pila impresos hace referencia a mi código de aplicación. Mi evidencia para probar esto negativo es buscar (comando-f) en la ventana de salida de depuración el nombre de mi aplicación; Tengo 24 seguimientos de pila descargados y el nombre de mi aplicación no está en ninguno de ellos, excepto en la parte superior con el mensaje de error. Puedo publicar uno de ellos, pero eso no parece muy útil.

En los casos en los que estoy trabajando hoy, esto sucede al hacer la transición de los controladores de vista, después de viewWillDisappear() y antes de viewWillAppear() . He encontrado partes de mi código para envolver dispatch_async() , pero ahora todas se manejan. Tengo puntos de interrupción y mensajes de depuración donde los objetos relevantes para los controladores de vista se asignan y desasignan, y todos se disparan después de que aparecen los mensajes de excepción. Esto está sucediendo tanto en el simulador como en mi iPhone iOS9, tanto en modo de depuración como de liberación.

¿Cómo puedo identificar el código de fondo que aparentemente está modificando la interfaz de usuario?


Este código PSPDFUIKitMainThreadGuard causa aserciones en el acceso UIKit fuera del hilo principal

Pasos para usar:

  1. Agregar al proyecto y compilar este archivo sin ARC
  2. Mover la definición de PSPDFAssert al primero del archivo
  3. Comentario de llamada de PSPDFLogError ya que no está definido
  4. importar <UIKit/UIKit.h>

Su aplicación se bloqueará y se detendrá con cualquier intento de modificar cualquier elemento de la interfaz de usuario del hilo de fondo

Para un uso rápido, use el siguiente código: NBUIKitMainThreadGuard


NSOperationQueue.mainQueue().addOperationWithBlock(){ [YOUR CODE] }