84

Ho notato che il seguente errore si verificava nella console durante l'esecuzione della mia app su iOS 9 quando si utilizzava uno storyboard. Sto usando xCode7. È qualcosa di cui devo preoccuparmi?storyboard iOS9 qual è l'azione non gestita (handleNonLaunchSpecificActions)?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> { 
    handler = remote; 
    info = <BSSettings: 0x176a5d90> { 
     (1) = 5; 
    }; 
} 
+0

Apple afferma che iOS 9 riguarda la stabilità, quindi suppongo che non dovresti preoccuparti ;-) P.S. Ho lo stesso problema e alcuni altri sviluppatori anche http://stackoverflow.com/questions/32344082/handlenonlaunchspecificactions-error-in-ios9 – Roma

+11

Non sono sicuro che sia correlato agli storyboard, lo vedo anche nella mia app non storyboard . – Koen

+0

Ci sono altri avvisi nella compilazione? Forse è un avvertimento che sembra banale? –

risposta

32

Non c'è niente di sbagliato con il codice. Questo è un messaggio di registrazione interno ad Apple, e dovresti presentare un radar a riguardo.

ci sono due suggerimenti che mostrano che questo è probabilmente codice di Apple:

  1. La sottolineatura che porta il nome del metodo _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion è una convenzione che indica che il metodo è privato/interno alla classe che è dichiarata a. (Vedere this comment.)

  2. E 'ragionevole supporre che le due lettere prefisso FBSSceneSnapshotAction è una scorciatoia per FrontBoard, che secondo Rene Ritchie in "iOS 9 wish-list: Guest Mode" fa parte del wh famiglia ole del software relativo alle applicazioni di lancio:

Con iOS 8, Apple refactoring suo amministratore di sistema, SpringBoard, in diverse componenti più piccoli, più mirati. Oltre a BackBoard, che era già stato scorporato per gestire le attività in background, hanno aggiunto Frontboard per le attività in primo piano. Hanno anche aggiunto PreBoard per gestire la schermata di blocco in condizioni crittografate e sicure. [...]

Non ho idea di che cosa il prefisso BS in BSSettings è per, ma

BS è una scorciatoia per BackBoard Settings, e un'analisi di questo messaggio di log indica che non è nulla l'hai fatto, e dovresti presentare un radar con i passaggi per riprodurre il messaggio di registrazione.

Se si desidera provare e acquisire una traccia di stack, è possibile implementare the category linked to here. Alcuni sostengono che l'override dell'API privata è una cattiva idea, ma in questo caso un'iniezione temporanea per catturare una traccia di stack non può essere troppo dannosa.

EDIT:

Ma, abbiamo ancora voglia di sapere che cosa questa azione è. Così ho messo un punto di interruzione -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion] e ha iniziato a stampare valori di registro e ho trovato una classe chiamata FBSceneImpl che aveva un sacco di informazioni sulla mia domanda:

Scene

Siamo in grado di scoprire quale metodo privato viene chiamato successivo (memorizzato nel contatore programma, istruzioni puntatore, registrarsi 15.)

Program Counter

ho cercato di trovare il non-trattati FBSceneSnapshotAction riferimen ced nel registro, ma senza dadi. Quindi, ho sottoclassato l'applicazione UIA e ho annullato _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Ora sono stato in grado di ottenere direttamente l'azione, ma ancora, non sappiamo cosa sia.

Quindi, ho guardato nuovamente FBSceneSnapshotAction. Risulta che ha una superclasse chiamata BSAction.

Quindi ho scritto a tool simile a RuntimeBrowser e ho cercato tutte le sottoclassi di BSAction. Si scopre che c'è un bel elenco di loro:

Action List

I due nomi metodo che abbiamo (uno dal registro e uno dal contatore di programma sui dispositivi) indicano che queste azioni sono utilizzati sotto il cofano per passare le azioni intorno al sistema.

Alcune azioni sono probabilmente inviate ai callback del delegato dell'app, mentre altre sono gestite internamente.

Quello che sta accadendo qui è che c'è un'azione che non è stata gestita correttamente e il sistema lo sta annotando. Non dovevamo vederlo, apparentemente.

+0

Una buona inchiesta, ma qui è qualcosa di interessante, sto ricevendo l'esatto errore OP quando uso l'API Apple privata. Suppongo che, dal momento che sto usando l'API privata, ricevo probabilmente il log della console per gli ingegneri Apple. – OhadM

+0

Lavoro di investigazione fantastico @Moshe –

+1

@Moshe Quanto ti ha pagato Apple per le indagini a loro nome? Ma potrebbero non essere interessati a questo. : p – codelearner

12

per quanto ne so, le informazioni di cui sopra è legato a iOS durante un'istantanea dello schermo (suppongo per la doppia comportamenti correlati Fare clic su casa multitask) .I profondamente indagato la mia domanda e sembra che non c'è niente di comportamenti indesiderati. Puoi tranquillamente ignorarlo, per ora.

È possibile utilizzare il seguente gist simple category alla prova se stessi contro le chiamate alla funzione di cui sopra:

1

ho capito, accadrà quando si dispone di metodo IBAction dichiarata in .h o il file .m, ma bisogna non vincolarlo a nessun controllo.

esempio .m:

- (IBAction)click:(id)sender{ 
} 

ma non ancora questo metodo per qualsiasi controllo in storyboard.

+0

Questo non è il caso nella mia app - Non ho alcun IBActions non associato, e ottengo anche questo messaggio. La mia app è un'app Swift. – henrikstroem

1

non ho trovato il motivo per cui accade nella mia app, ma almeno puoi notare un'eccezione, se vuoi evitare che questo si verifichi nel tuo pannello dei log. Non è una soluzione, ma potrebbe darti una visione più approfondita del perché sta svanendo controllando uno qualsiasi degli argomenti che vengono passati nella cattura. Versione

rapida 2:

import UIKit 

extension UIApplication { 
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler:() -> Void) { 
     //whatever you want to do in this catch 
     print("handleNonLaunchSpecificActions catched") 
    } 
} 
Problemi correlati