При наведении и касании карандаша происходит сбой приложения после обновления iPadOS 26.0.1IOS

Программируем под IOS
Ответить
Anonymous
 При наведении и касании карандаша происходит сбой приложения после обновления iPadOS 26.0.1

Сообщение Anonymous »

После обновления 26.0.1 мое приложение вылетает у пользователей, использующих Apple Pencil.
Я сузил его до функции наведения. iPadOS 26 не дал сбоя.
Это все в проекте Spritekit, поэтому в skScene.
Когда пользователь наводит курсор на пустое пространство, наведение также срабатывает в фоновом режиме, и он может нормально нажимать.
Но когда пользователь наводит курсор на объект или кнопку, он подсвечивает их, как и предполагалось. Однако, когда он затем нажимает на эти объекты, приложение вылетает с сообщением ниже.
Раньше в прошлом году все работало нормально.
Если пользователи отключают «эффекты наведения» в настройках карандаша, сбоя не происходит.

Ошибка утверждения в -[UIPencilInteraction
/>_handleHoverGestureRecouncer:], UIPencilInteraction.m:895
Завершение работы приложения из-за неперехваченного исключения
'NSInternalInconsistencyException', причина: '-[UIPencilInteraction
_handleHoverGestureRecouncer:]: получены обновления от неизвестного распознавателя жестов наведения: '

Используемый код:

Код: Выделить всё

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)
Срабатываемые методы:

Код: Выделить всё

@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 }
}
Похоже, что состояния завершения/отмены/сбоя при наведении никогда не вызываются в hoverFunc.
Нажатие — это просто обычное касание, как если бы использовалось палец. Кстати, при использовании пальцев приложение не аварийно завершает работу, поэтому оно полностью связано с наведением курсора, которое активирует карандаш.
Я также включаю/выключаю эти .enabled или удаляю их всякий раз, когда игра приостанавливается, уходит и т. д.
ИИ предлагает мне прекратить использовать эти методы и перейти к подходу с центром уведомлений. Поскольку раньше все работало нормально, я хотел бы сначала посмотреть, можно ли найти эту ошибку.

Подробнее здесь: https://stackoverflow.com/questions/797 ... 0-1-update
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»