提问人:abant 提问时间:8/6/2023 更新时间:8/6/2023 访问量:14
更新来自 intent 视图控制器的 Siri intent 处理程序响应
Update Siri intent handler response from the intent view controller
问:
目前,我正在尝试通过我的 intent 视图控制器在我的 siri intent 上更新我的成功消息的响应,但是,当我在 siri 中说出命令时,它只运行在我的 intent 处理程序中传递的默认参数,并完全绕过我在 intent 视图控制器中初始化的响应参数的值。
class IntentViewController: UIViewController, INUIHostedViewControlling {
override func viewDidLoad() {
super.viewDidLoad()
FirebaseApp.configure()
}
func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) {
if interaction.intentHandlingStatus == .success {
if let response = interaction.intentResponse as? ViewMyMedsIntentResponse {
response.meds = ["tylenol", "advil", "morphine"]
getMedsString { [weak self] medsArray in
guard let self = self else {
// Handle the case when self has been deallocated before the closure is executed
completion(false, parameters, self?.desiredSize ?? CGSize.zero)
return
}
let medView = MedsView()
self.view.addSubview(medView)
medView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
medView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
self.view.trailingAnchor.constraint(equalTo: medView.trailingAnchor),
medView.topAnchor.constraint(equalTo: self.view.topAnchor),
])
medView.setNeedsLayout()
medView.layoutIfNeeded()
medView.update(meds: medsArray)
completion(true, parameters, CGSize(width: self.desiredSize.width, height: medView.frame.height))
}
return
}
}
}
}
import Foundation
import os.log
import Intents
public class ViewMyMedIntentHandler: NSObject, ViewMyMedsIntentHandling {
public func handle(intent: ViewMyMedsIntent, completion: @escaping (ViewMyMedsIntentResponse) -> Void) {
let response = ViewMyMedsIntentResponse(code: .success, userActivity: nil)
response.meds = ["None"]
completion(response)
}
}
[这是我对 ViewMyMedsIntent(https://i.stack.imgur.com/zETac.png) 的意图定义的样子
因此,回顾一下,在意图视图控制器中,我希望 siri 大声说出 [“tylenol”、“advil”、“morphine”],但就像我说的,它绕过了这一点,只是读取我在意图处理程序中传递的 [“None”] 作为默认值。
我试图通过执行 response.meds 来更新意图视图控制器中的响应,希望它能更新响应值,并且 siri 会大声朗读所有药物,但它只是读取意图处理程序中传递的任何内容。另外,作为快速说明,我不想在意图处理程序中进行任何更新,因为我的计划是查询一个 firebase 数据库,我只能在意图视图处理程序中访问该数据库,因为我只能导入 firebase 数据库,因为该库已添加到意图视图控制器中。
答: 暂无答案
评论