Beim Ausführen meiner App unter iOS 9 bei Verwendung eines Storyboards ist der folgende Fehler in der Konsole aufgetreten. Ich benutze xCode7. Muss ich mir darüber Sorgen machen?
-[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
quelle
quelle
SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.
wird direkt vor der angegebenen Fehlermeldung protokolliert.Antworten:
An Ihrem Code ist nichts auszusetzen. Dies ist eine Apple-interne Protokollierungsnachricht, und Sie sollten ein Radar darüber einreichen.
Es gibt zwei Hinweise, die zeigen, dass dies wahrscheinlich Apples Code ist:
Der Unterstrich vor dem Methodennamen
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
ist eine Konvention, die angibt, dass die Methode privat / intern für die Klasse ist, in der sie deklariert ist. (Siehe diesen Kommentar .)Es ist zu vermuten, dass das Präfix aus zwei Buchstaben
FBSSceneSnapshotAction
eine Abkürzung für FrontBoard ist, das laut Rene Ritchie in der " iOS 9-Wunschliste: Gastmodus " Teil der gesamten Softwarefamilie zum Starten von Apps ist:Ich habe keine Ahnung, wofür dasBS
PräfixBSSettings
ist, aberBS
ist eine Abkürzung fürBackBoard Settings
, und eine Analyse dieser Protokollnachricht würde anzeigen, dass Sie nichts getan haben, und Sie sollten ein Radar mit Schritten zum Reproduzieren der Protokollierungsnachricht einreichen.Wenn Sie versuchen möchten, eine Stapelverfolgung abzurufen, können Sie die hier verknüpfte Kategorie implementieren . Einige würden argumentieren, dass das Überschreiben der privaten API eine schlechte Idee ist, aber in diesem Fall kann eine temporäre Injektion zum Abrufen eines Stack-Trace nicht zu schädlich sein.
BEARBEITEN:
Aber wir wollen immer noch wissen, was diese Aktion ist. Also setzte ich einen Haltepunkt auf
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
und begann, Registerwerte auszudrucken. Ich fand eine Klasse namens,FBSceneImpl
die eine ganze Reihe von Informationen über meine Anwendung enthielt:Wir können herausfinden, welche private Methode als nächstes aufgerufen wird (gespeichert im
Programmzähler,Befehlszeiger, Register 15.)Ich habe versucht, die nicht behandelten
FBSceneSnapshotAction
Punkte im Protokoll zu finden, aber keine Würfel. Dann habe ich UIApplication untergeordnet und überschrieben_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Jetzt konnte ich direkt an der Aktion teilnehmen, aber wir wissen immer noch nicht, was es ist.Dann habe ich mir noch einmal die FBSceneSnapshotAction angesehen. Es stellt sich heraus, dass es eine Superklasse namens gibt
BSAction
.Dann habe ich ein Tool geschrieben , das RuntimeBrowser ähnelt, und alle Unterklassen von BSAction nachgeschlagen. Es stellt sich heraus, dass es eine ganze Liste von ihnen gibt:
Die beiden Methodennamen (einer aus dem Protokoll und einer aus dem Programmzähler auf den Geräten) zeigen an, dass diese Aktionen unter der Haube zum Weiterleiten von Aktionen im System verwendet werden.
Einige Aktionen werden wahrscheinlich an die Rückrufe des App-Delegaten gesendet, während andere intern ausgeführt werden.
Was hier passiert ist, dass es eine Aktion gibt, die nicht richtig gehandhabt wurde und das System bemerkt. Wir sollten es anscheinend nicht sehen.
quelle
AFAIK, die obigen Informationen beziehen sich auf iOS während des Schnappschusses des Bildschirms (ich nehme an, für Doppelklick-Multitasking-Verhalten zu Hause). Ich habe meine Anwendung gründlich untersucht und es scheint, dass sie keine Nebenverhaltensweisen aufweist. Sie können es vorerst ignorieren.
Sie können die folgende einfache Kategorie verwenden , um sich gegen die Aufrufe der obigen Funktion zu testen:
quelle
Ich habe es herausgefunden, es wird passieren, wenn Sie die IBAction-Methode in der .h- oder .m-Datei deklariert haben, sie aber nicht an ein Steuerelement gebunden haben.
.m Beispiel:
Diese Methode wurde jedoch keinem Steuerelement im Storyboard zugewiesen.
quelle
Ich habe nicht herausgefunden, warum es in meiner App passiert, aber zumindest können Sie die Ausnahme abfangen, wenn Sie verhindern möchten, dass dies in Ihrem Protokollbereich auftaucht. Es ist keine Lösung, aber es könnte Ihnen mehr Einblick geben, warum es passiert, indem Sie eines der Argumente untersuchen, die im Fang übergeben werden.
Swift 2 Version:
quelle