iPad端iMessage Extension重复点击同一条消息时didSelect方法不触发的解决方案求助
iPad端iMessage Extension重复点击同一条消息时didSelect方法不触发的解决方案求助
各位大佬好!我正在开发一款回合制iMessage游戏,现在卡在iPad适配的问题上了,有没有已经解决过这个问题的朋友来支个招?
问题描述
在iPad上,didSelect(message:conversation:)方法只有用户第一次点击消息气泡时会触发,再次点击同一条消息完全没反应——这个方法根本不会被调用。但在iPhone上每次点击都能正常触发,这直接搞崩了我的回合制游戏,毕竟玩家们需要反复和同一条消息交互。
我已经尝试过的方案
- 发送消息后调用
dismiss():本来想通过这个方法取消消息选中状态,让下一次点击能被识别成新操作,但没用。 - 尝试其他生命周期方法:
willBecomeActive(with:):会触发,但拿不到选中的消息didBecomeActive(with:):同样拿不到选中消息didResignActive(with:)/willResignActive(with:):对这个问题没帮助
- 检查
conversation.selectedMessage:在生命周期方法里检查的时候,这个值经常是过时的或者nil - 每回合发送新消息(用不同的URL/会话):没用,因为用户还是会点击同一个可见的气泡
- 强制UI刷新和状态重载:底层的选中状态根本没更新
相关代码
override func didSelect(_ message: MSMessage, conversation: MSConversation) { // iPhone: 每次点击都触发 ✓ // iPad: 只有第一次点击触发 ✗ loadGame(from: message, in: conversation) }
环境信息
- Xcode 15及以上
- iOS 16.6及以上
- 基于MSMessagesAppViewController子类开发
- 游戏状态编码在消息URL中
我想寻求的帮助
- 有没有人发布过在iPad上正常运行的回合制iMessage游戏?
- 有没有我漏掉的可行 workaround?
- 有没有未公开的API或者创意解决方案?
- 我是不是应该完全换一种架构来做?
我看到开发者论坛上从2016年就有关于这个问题的帖子,但苹果一直没回应。真心希望社区里有大佬已经搞定这个问题了!如果需要更多代码或者测试任何建议,我都乐意配合,谢谢大家!
备注:内容来源于stack exchange,提问作者Anemme
相关产品推荐
相关产品推荐

