He notado que aparece el siguiente error en la consola al ejecutar mi aplicación en iOS 9 al usar un guión gráfico. Estoy usando xCode7. ¿Es esto algo de lo que debo preocuparme?
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
handler = remote;
info = <BSSettings: 0x176a5d90> {
(1) = 5;
};
}
error-handling
uistoryboard
ios9
xcode7
transition-coordinator
Alex Stone
fuente
fuente
SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.
se registra justo antes del mensaje de error citado.Respuestas:
No hay nada de malo en tu código. Este es un mensaje de registro interno de Apple, y debe presentar un radar al respecto.
Hay dos pistas que muestran que probablemente este sea el código de Apple:
El guión bajo que encabeza el nombre del método
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
es una convención que indica que el método es privado / interno a la clase en la que está declarado (consulte este comentario ).Es razonable suponer que el prefijo de dos letras
FBSSceneSnapshotAction
es una abreviatura de FrontBoard, que según Rene Ritchie en " Lista de deseos de iOS 9: Modo invitado" es parte de toda la familia de software relacionada con el lanzamiento de aplicaciones:No tengo idea de para qué es elBS
prefijoBSSettings
, peroBS
es una abreviatura deBackBoard Settings
, y un análisis de este mensaje de registro indicaría que no es nada de lo que hizo, y debe presentar un radar con los pasos para reproducir el mensaje de registro.Si desea intentar obtener un seguimiento de la pila, puede implementar la categoría vinculada aquí . Algunos argumentarían que anular la API privada es una mala idea, pero en este caso una inyección temporal para obtener un seguimiento de la pila no puede ser demasiado dañina.
EDITAR:
Pero, todavía queremos saber qué es esta acción. Así que puse un punto de interrupción
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
y comencé a imprimir valores de registro y encontré una clase llamadaFBSceneImpl
que tenía un montón de información sobre mi aplicación:Podemos averiguar qué método privado se llama a continuación (almacenado en el
contador de programa,puntero de instrucción, registro 15).Intenté encontrar la
FBSceneSnapshotAction
referencia no manejada en el registro, pero no dados. Luego, subclasé UIApplication y anulé_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Ahora pude llegar a la acción directamente, pero aún así, no sabemos qué es.Luego, volví a mirar FBSceneSnapshotAction. Resulta que tiene una superclase llamada
BSAction
.Luego escribí una herramienta similar a RuntimeBrowser y busqué todas las subclases de BSAction. Resulta que hay una buena lista de ellos:
Los dos nombres de métodos que tenemos (uno del registro y otro del contador del programa en los dispositivos) indican que estas acciones se utilizan bajo el capó para pasar acciones por el sistema.
Algunas acciones probablemente se envían a las devoluciones de llamada del delegado de la aplicación, mientras que otras se manejan internamente.
Lo que está sucediendo aquí es que hay una acción que no se manejó correctamente y el sistema lo está notando. Al parecer, no se suponía que lo viéramos.
fuente
AFAIK, la información anterior está relacionada con iOS durante la instantánea de la pantalla (supongo que para hacer doble clic en el comportamiento relacionado con la multitarea en el hogar). Investigué profundamente mi aplicación y parece que no obtiene ningún comportamiento secundario. Puede ignorarlo con seguridad, por ahora.
Puede usar la siguiente categoría simple de esencia para probarse contra las llamadas a la función anterior:
fuente
Lo he descubierto, sucederá cuando tenga el método IBAction declarado en el archivo .ho .m pero no lo haya vinculado a ningún control.
.m ejemplo:
pero no asignó este método a ningún control en el guión gráfico.
fuente
No he descubierto por qué sucede en mi aplicación, pero al menos puede detectar la excepción, si desea evitar que esto aparezca en su panel de registro. No es una solución, pero podría darle más información sobre por qué está sucediendo al inspeccionar cualquiera de los argumentos que se pasan en la captura.
versión swift 2:
fuente