【问题标题】:Handling Errors with intent parameters and Dynamic options with Siri使用 Siri 处理意图参数和动态选项的错误
【发布时间】:2020-03-10 15:52:59
【问题描述】:
  • 我从意图定义中将意图参数设置为dynamic

  • 假设我获取此选项信息的服务器当前已关闭。

目前尚不清楚如何向用户展示目前无法检索选项的事实。我们应该返回选项的完成字段也接受Error。 我已经用Error 的子类填充了它,并且我还为这个类实现了LocalizedError 协议......但是当我遇到来自快捷方式应用程序的错误时,Apple 只是呈现一个弹出消息返回未本地化的可怕消息(但包含正确的错误名称)。

这是我正在使用的代码...

func provideCarModelOptions(for intent: CarIntent, with completion: @escaping ([String]?, Error?) -> Void) {

    if(somethingGoesWrongWithServers()){
        completion([],CarError.ServerDown)
    }else{
        completion(ReturnListOfModels(), nil)
    }
}

这就是我实现CarError 枚举的方式

public enum CarError:Error{
    case serverDown
    case generic
}

extension CarError : LocalizedError{
    public var errorDescription: String? {
        switch self {

        case .serverDown:
            return "Server is down"

        case .generic:
            return "SomethingGoesWrong"

        }

    }
}

是我做错了什么还是 Apple 没有以正确的方式处理错误?

【问题讨论】:

  • 不太确定我是否符合您的要求。但是您是否尝试过添加自己的自定义类型来捕获执行中的特定事件。这样,如果您的服务器出错,您可以在您的类型中捕获它并相应地处理它。
  • 你能弄明白吗?我面临同样的问题,我需要从 provide...Options(for intent: ...) 方法返回自定义错误,而 iOS 仅显示错误枚举中的错误案例名称,而不是本地化描述。
  • 你们中的任何人都找到了解决方案吗?我也有同样的问题?

标签: swift siri sirishortcuts


【解决方案1】:

这对我来说提供了本地化的描述:

completion(nil, INIntentError.init(_nsError: NSError(domain: "com.Domain.error", code: 0, userInfo: [NSLocalizedDescriptionKey: "Error Message"])))

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多