Ich habe es auf die Hover-Funktion eingegrenzt. iPadOS 26 ist nicht abgestürzt.
Das ist alles in einem Spritekit-Projekt, also in einer skScene.
Wenn der Benutzer mit der Maus über einen leeren Raum fährt, wird das Schweben auch im Hintergrund ausgelöst und er kann problemlos tippen.
Wenn der Benutzer jedoch mit der Maus über ein Objekt oder eine Schaltfläche fährt, werden diese wie beabsichtigt hervorgehoben. Wenn er dann jedoch auf diese Objekte tippt, stürzt das App-Insta mit der folgenden Meldung ab.
Das hat im letzten Jahr alles einwandfrei funktioniert.
Wenn Benutzer „Hover-Effekte“ in den Pencil-Einstellungen deaktivieren, tritt der Absturz nicht auf.
Behauptungsfehler in -[UIPencilInteraction
_handleHoverGestureRecognizer:], UIPencilInteraction.m:895
App wird aufgrund einer nicht erfassten Ausnahme beendet
'NSInternalInconsistencyException', Grund: '-[UIPencilInteraction
_handleHoverGestureRecognizer:]: Aktualisierungen von einem unbekannten Hover-Gestenerkenner erhalten: '
Verwendeter Code:
Code: Select all
var pencTapGesture = UIPencilInteraction()
var pencHoverGesture = UIHoverGestureRecognizer.init(target: self, action: #selector(self.hoverFunc(sender:)))
pencHoverGesture.delegate = self
pencTapGesture.delegate = self
self.view?.addGestureRecognizer(pencHoverGesture)
self.view?.addInteraction(pencTapGesture)
Code: Select all
@objc func hoverFunc(sender: UIHoverGestureRecognizer) {
if #available(iOS 16.1, *) {
if sender.state == .began || sender.state == .changed {
//Some code
} else {}
} else {
//Not available for older OS
}
//Normal touches detected using tapgestureRecognizer not touchesbegan
@objc func tapFunc(sender: UITapGestureRecognizer) {
//Some code
//Still called before the crash.
}
//Function being used to detect double taps on the pencil side still works:
@available(iOS 17.5, *)
func pencilInteraction(_ interaction: UIPencilInteraction, didReceiveTap tap: UIPencilInteraction.Tap) {
let preferredAction = UIPencilInteraction.preferredTapAction
// Respect the systemwide preferred action to ignore double taps.
guard preferredAction != .ignore else { return }
}
Das Tippen ist nur ein normales Tippen, als ob ein Finger verwendet würde. Bei Verwendung von Fingern stürzt die App übrigens nicht ab, sie ist also lediglich mit dem Hover verbunden, den der Stift aktiviert.
Ich schalte diese auch ein/aus oder entferne sie, wenn das Spiel pausiert, wegbewegt usw.
KI schlägt mir vor, diese Methoden nicht mehr zu verwenden und zu einem Benachrichtigungscenter-Ansatz überzugehen. Da es früher einwandfrei funktionierte, würde ich jedoch gerne zuerst sehen, ob dieser Fehler gefunden werden kann.
Mobile version