gpt4 book ai didi

ios - siri 快捷方式按钮 (INUIAddVoiceShortcutButton) 在有多个快捷方式 (NSUserActivity) 时显示错误的标题

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:27 24 4
gpt4 key购买 nike

我的应用程序中有 2 个 siri 快捷方式。我使用 NSUserActivity 来提供这些快捷方式。我还在我的 info.plist 中创建了 2 个 NSUserActivityTypes。

有 2 个 View Controller 处理这些快捷方式(1 个 View Controller 用于 1 个快捷方式)。

如果我从 1 个 View Controller 添加 1 个 siri 快捷方式,然后转到第 2 个 View Controller ,第 2 个 View Controller 上的 native siri 快捷方式按钮 (INUIAddVoiceShortcutButton) 会自动选择第一个快捷方式(从第 1 个 View Controller 创建) ) 并显示带有建议短语的“已添加到 Siri”,而不是显示“添加到 Siri”按钮。我仔细检查了每个 NSUserActivity 都有不同的标识符,但仍然以某种方式选择了错误的快捷方式。

View Controller 1:

let userActivity = NSUserActivity(activityType: "com.activity.type1")
userActivity.isEligibleForSearch = true
userActivity.isEligibleForPrediction = true
userActivity.title = shortcut.title
userActivity.suggestedInvocationPhrase = suggestedPhrase

let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributes.contentDescription = description
userActivity.contentAttributeSet = attributes
let shortcut = INShortcut(userActivity: userActivity)
let siriButton = INUIAddVoiceShortcutButton(style: .whiteOutline)
siriButton.translatesAutoresizingMaskIntoConstraints = false
siriButton.shortcut = shortcut
self.view.addSubview(siriButton)

View Controller 2:

let userActivity2 = NSUserActivity(activityType: "com.activity.type2")
userActivity2.isEligibleForSearch = true
userActivity2.isEligibleForPrediction = true
userActivity2.title = shortcut.title
userActivity2.suggestedInvocationPhrase = suggestedPhrase

let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributes.contentDescription = description
userActivity2.contentAttributeSet = attributes

let shortcut = INShortcut(userActivity: userActivity2)
let siriButton = INUIAddVoiceShortcutButton(style: .whiteOutline)
siriButton.translatesAutoresizingMaskIntoConstraints = false
siriButton.shortcut = shortcut
self.view.addSubview(siriButton)

当我删除应用程序并重新安装而不删除手机设置应用程序中的快捷方式时,会发生类似的事情。

最佳答案

似乎是 IOS 的错误。我想出了解决这个问题的方法。每次用户添加/编辑 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
}

在第二个 View Controller 中做同样的事情。

关于ios - siri 快捷方式按钮 (INUIAddVoiceShortcutButton) 在有多个快捷方式 (NSUserActivity) 时显示错误的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52342934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com