看起来像是 IOS 的 bug。我想出了解决这个问题的方法。每次用户添加/编辑 siri 快捷方式时,您都必须创建一个新的 siri 按钮。在创建 Siri 按钮之前,请执行以下操作
1-获取所有语音快捷方式INVoiceShortcutCenter
通过调用该函数。请注意,这是异步发生的,因此您需要在需要数据之前执行此操作(例如在 AppDelegate 中)。每当用户添加 Siri 快捷方式时(可能在INUIAddVoiceShortcutViewControllerDelegate.addVoiceShortcutViewController(_:didFinishWith:error)
方法)。
INVoiceShortcutCenter.shared.getAllVoiceShortcuts { (voiceShortcutsFromCenter, error) in
guard let voiceShortcutsFromCenter = voiceShortcutsFromCenter else {
if let error = error as NSError? {
os_log("Failed to fetch voice shortcuts with error: %@", log: OSLog.default, type: .error, error)
}
return
}
self.voiceShortcuts = voiceShortcutsFromCenter
}
2-在 View Controller-1 中通过迭代所有语音快捷方式检查快捷方式是否已添加
let voiceShorcut = voiceShortcuts.first { (voiceShortcut) -> Bool in
if let activity = voiceShortcut.shortcut.userActivity, activity.activityType == "com.activity.type1" {
return true
}
return false
}
3- 如果您的语音快捷方式已注册,则通过INShortcut
到 Siri 按钮,否则不要设置它。
if voiceShorcut != nil {
let shortcut = INShortcut(userActivity: userActivity1)
siriButton.shortcut = shortcut
}
在第二个视图控制器中执行相同的操作。