0

我同时使用 NSUserActivity 和 Core Spotlight 来索引我的应用程序上的内容。我使用 Core Spotlight 的原因是因为我想在用户访问(打开)它之前索引这个内容。

我面临的问题是在 AppDelegate 方法中: func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool

当我在视图控制器中执行此操作时,基本上userActivity 只包含正确的信息:

userActivity = myUserActivity

但如果我这样做,它就不起作用:

CSSearchableIndex.default().indexSearchableItems(searchableItems).

通过使用第二种方法(Core Spotlight),我可以在 Spotlight 搜索中看到所有结果,但是当我点击该项目时,AppDelegate 方法中没有任何信息。

最糟糕的是:

po userActivity.activityType "com.apple.corespotlightitem"

如果我打印activityType,而不是我自己的,我会得到这个......

有什么建议么?

4

1 回答 1

2

当您的应用程序从 CoreSpotlight 结果启动时,您会得到一个CSSearchableItemActionType.

您需要通过检索来处理此类操作CSSearchableItemActivityIdentifier- 当您将可搜索项目提交到索引时,此值将匹配您为可搜索项目提供的标识符。

就像是:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        guard let selectedItem = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
            return
        }
        // Do something with selectedItem
    }
}
于 2018-07-24T01:49:35.833 回答