NSUserActivity与Core Spotlight的深层链接

时间:2018-07-24 01:10:07

标签: ios swift xcode corespotlight nsuseractivity

我同时使用NSUserActivity和Core Spotlight为我的应用程序中的内容编制索引。 我使用Core Spotlight的原因是,我想在用户访问(打开)之前将该内容编入索引

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

当我在viewController中执行此操作时,基本上userActivity 包含正确的信息:

userActivity = myUserActivity

但是如果我这样做是行不通的:

CSSearchableIndex.default().indexSearchableItems(searchableItems)

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

最糟糕的是:

po userActivity.activityType "com.apple.corespotlightitem"

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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

从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
    }
}