处理 Siri 中带有意图参数和动态选项的错误。

8
  • 我已经在意图定义中将意图参数设置为 dynamic

  • 假设提供选项信息的服务器当前处于宕机状态。

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

以下是我正在使用的代码:

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"

        }

    }
}

我是否做错了什么,或者苹果没有正确处理错误?


我不太确定我理解你的要求。但是你是否尝试添加自己的自定义类型来捕获执行过程中的特定事件呢?这样,如果您的服务器出错,您可以在自己的类型中捕获它并进行相应的处理。 - ravisekahrp
你能解决这个问题吗?我也遇到了同样的问题,需要从 provide...Options(for intent: ...) 方法中返回自定义错误,但是iOS只显示错误枚举的错误名称,而不是本地化描述。 - Ruslan
你们中有人解决了这个问题吗?我也遇到了同样的问题。 - Nandha
1个回答

5

这个方法对我有效,提供了本地化的描述:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接