Проблема
На iPad функция DidSelect(message:conversation:) срабатывает только при первом касании пользователем всплывающего сообщения. Повторное нажатие на одно и то же сообщение ничего не дает — метод просто не вызывается.
На iPhone он каждый раз работает правильно.
Это нарушает пошаговые игры, в которых оба игрока взаимодействуют с одним и тем же сообщением.
Что я пробовал до сих пор
- Вызов метода Disclaim() после отправки – надеюсь отменить выделение сообщения и выполнить следующее нажатие регистрируется как новый. Не сработало.
- Использование других методов жизненного цикла:
- — срабатывает, но не отображает выбранное сообщение.
Код: Выделить всё
willBecomeActive(with:) - – та же проблема
Код: Выделить всё
didBecomeActive(with:) - / willResignActive(with:) – для этого бесполезно.
Код: Выделить всё
didResignActive(with:)
- Проверка разговора.selectedMessage – часто устарел или равен нулю при проверке методов жизненного цикла.
- Отправка нового сообщения каждый ход (другой URL/сеанс) – не помогает, поскольку пользователь по-прежнему нажимает на тот же видимый пузырь
- Принудительное обновление пользовательского интерфейса и перезагрузку состояния – базовое состояние выбора не обновляется
Код: Выделить всё
override func didSelect(_ message: MSMessage, conversation: MSConversation) {
// iPhone: fires every tap ✓
// iPad: fires only on first tap ✗
loadGame(from: message, in: conversation)
}
- Xcode 15+
- iOS 16.6+
- Подкласс MSMessagesAppViewController
- Состояние игры, закодированное в URL-адресе сообщения
- Кто-нибудь выпустил пошаговую игру iMessage, которая работает на iPad?
- Есть ли обходной путь, который мне не хватает?
- Есть ли недокументированные API или творческие решения?
- Должен ли я использовать совершенно другую архитектуру?
Будем рады поделиться дополнительным кодом или попробовать любые предложения. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/799 ... essage-any
Мобильная версия