应用程序在使用Siri Kit设置carName的词汇表时崩溃

问题描述 投票:2回答:2

我正在尝试使用SiriKit开发一个应用程序以获得车门锁状态并从Siri设置相同的应用程序。我跟着这个博客https://www.appcoda.com/sirikit-introduction/做了所有设置,用INGetCarLockStatusIntent替换了INStartWorkoutIntent。

但是当我尝试为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
}

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

ios11 sirikit xcode9.3
2个回答
0
投票

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

我的崩溃修复了这一点


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.