2

我正在尝试使用 SiriKit 开发一个应用程序来获取车门锁状态并从 Siri 进行设置。我关注了这个博客https://www.appcoda.com/sirikit-introduction/并进行了所有设置,将INStartWorkoutIntent替换为INGetCarLockStatusIntent

但是,当我尝试为 carName 设置词汇表时,应用程序因以下异常而崩溃,

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“不处理任何可能使用该类型词汇表的意图的应用程序非法尝试提供 INVocabularyStringTypeCarName 类型的词汇表”

我用来设置词汇的源代码是,

INPreferences.requestSiriAuthorization { (status) in

  }      
INVocabulary.shared().setVocabularyStrings(["benz", "bmw", "audi"], of: .carName)

AppDelegate中,我添加了以下方法,

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    guard let intent = userActivity.interaction?.intent as? INGetCarLockStatusIntent else {
        print("AppDelegate: Start Workout Intent - FALSE")
        return false
    }
    print("AppDelegate: Start Workout Intent - TRUE")
    print(intent)
    return true
}

还创建了意图处理程序的扩展并实现了 INSetCarLockStatusIntentHandlingINGetCarLockStatusIntentHandling协议。当我尝试在 iPhone 10 中运行它时,我遇到了这个问题。

4

2 回答 2

0

检查是否在 Build Phases->Embed App Extensions 项目的 TARGETS 中添加了您的 Siri 扩展。也许如果您将 INStartWorkoutIntent 替换为 INGetCarLockStatusIntent,旧的 INStartWorkoutIntent 仍然存在。

我的崩溃解决了这个问题。

于 2018-09-13T09:53:00.690 回答
0

我面临着类似的问题。确保您的扩展的部署目标设置为适当的 iOS 版本。使用最新的 Xcode(目前为 10.1)创建扩展会将部署目标设置为12.1 ,因此在iOS 10上运行时会导致崩溃。因此,您应该将其更改为所需的最小值。

于 2019-02-17T12:51:49.137 回答