it-swarm.com.de

UIWindow endDisablingInterfaceAutorotationAnimated Fehler wird in der Konsole angezeigt, wenn die Tastatur interaktiv aus der Auflistungsansicht in iOS9 entfernt wird

Ich bekomme diesen seltsamen Fehler nur in iOS9:

[UIWindow endDisablingInterfaceAutorotationAnimated:] called on UITextEffectsWindow: ...without matching
-beginDisablingInterfaceAutorotation. Ignoring.

immer wenn ich die Tastatur interaktiv verwende, indem ich sie aus meiner collectionView nach unten ziehe. Ich erhalte den Fehler nicht, wenn ich die Tastatur mit einer Tippbewegung abtippe oder die Eingabetaste drücke. Das ist sehr frustrierend. Selbst wenn ich keine Tastaturbenachrichtigungen sehe, erhalte ich diese Fehlermeldung immer noch bei dieser interaktiven Tastaturentlassung. Ich frage mich, ob jemand anderes auf diesen Fehler gestoßen ist und eine Lösung gefunden hat. Ich habe ein inputAccessoryView bestehend aus einem auf der Tastatur montierten TextView.

55
alionthego

Ich hatte das gleiche Problem auf iOS9 aber mit einem tableView. Ich habe dieses zusammen mitself.tableView.keyboardDismissMode = .Interactive implementiert und es hat für mich funktioniert.

// Dismiss keyboard when scrolling
func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    textView.resignFirstResponder()
}
25
vandit

Dinge zu überprüfen

Es sieht so aus, als hätten mehrere andere SO Benutzer unter verschiedenen Bedingungen ähnliche Erfahrungen gemacht. Schauen Sie sich dies an thread . Da möglicherweise eine Menge Dinge passieren, die dies verursachen Möglicherweise möchten Sie den bereitgestellten Thread überprüfen, um festzustellen, ob Sie einen passenden Anwendungsfall finden. Es ist unklar, wie Sie die Tastatur schließen, Sie möchten jedoch möglicherweise so etwas von einer Methode oder als Gestenerkennung aufrufen (und nicht als direkte Entlassung aus einem bestimmten Objekt):

UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)

Aus dem angegebenen Thread geht hervor, dass die Art des Problems in den meisten Fällen ein doppelter Aufruf während der Präsentation oder Ablehnung der Ansicht war. Ich habe auch Probleme gesehen, bei denen ein Storyboard-Segment verbunden war (oder in einigen Fällen wurde es entfernt, aber die XML befand sich noch in der Storyboard-Codeansicht) und ein codebasiertes Segment (performSegueWithIdentifier ...) für dieselbe Animation (welche) ruft zwei Display/Dismiss-Aufrufe auf).

Ich schaue im Protokoll nach, welche Anrufe gerade vor dem Fehler protokolliert werden, und suche dann in der Protokollansicht, ob ein redundanter Anruf vorliegt. Auch hier kann es zu Redundanzen bei den Verhaltensweisen/Animationen/Layouts im Storyboard und bei den im Code getätigten Aufrufen kommen.

[~ # ~] Update [~ # ~]

Die Kommentare des OP haben mich daran erinnert, dass ich in einigen Fällen, insbesondere bei Anrufen während Präsentationen/Entlassungen, Fälle erlebt habe, in denen eine Entwicklerfunktion nur dann erfolgreich funktioniert, wenn sie in einen dispatch_async-Aufruf eingeschlossen wird. Es gibt einige kritische Systemaufrufe, die anscheinend nicht gut funktionieren, wenn der Entwicklercode in denselben Frames eingegeben wird.

Ein konkretes Beispiel ist dieser Aufruf innerhalb von willMoveToWindow. In diesem Fall habe ich einen weakSelf-Verweis auf die Ansicht und überprüfe einfach das newWindow auf den Wert Null (zeigt an, dass die Ansicht geschlossen wird), bevor ich meinen Code aufrufe.

Wenn also in diesem Beispiel der Dispatch-Aufruf entfernt wird, führt der Entwicklercode zum Absturz der gesamten App. Ich vermute, dass die Systemübergangsaufrufe (im Zusammenhang mit dem Transponieren zum/vom Fenster) mit den Anforderungen des Entwicklers zu diesem Zeitpunkt in Konflikt geraten können.

 dispatch_async(dispatch_get_main_queue(), { () -> Void in

     //the saved flag is true only when user hits the done button
     if !(weakSelf!.saved) {
         weakSelf?.completeNotes(nil)
     }

 })
6
Tommie C.

Ich bin auf dieses Problem gestoßen und meine Sicht ist durcheinander geraten. So löse ich es.

Ich hatte eine viewController, die auf textFieldShouldBeginEditing vorgestellt wurde. In viewController wurde eine textField in becomeFirstResponder auf viewDidLoad gesetzt. 

Die Lösung für mich ist, die becomeFirstResponder auf viewDidAppear zu verschieben.

1
okysabeni

Wenn es während des Präsentierens/Entfernens von Übergangsanimationen ist, überprüfen 

transitionContext.completeTransition(!transitionContext.transitionWasCancelled)

wird nicht mehrfach aufgerufen ... einfacher Fehler zu machen.

0
slimbikr