NSUserActivity 与 Core Spotlight 深度 link
NSUserActivity vs. Core Spotlight deep link
我同时使用 NSUserActivity 和 Core Spotlight 来索引我应用程序中的内容。
我使用 Core Spotlight 的原因是因为我想在 用户访问(打开)它之前 索引该内容。
我面临的问题是在 AppDelegate 方法中:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
基本上 userActivity
只有 包含正确的信息,当我在 viewController:
中执行此操作时
userActivity = myUserActivity
但如果我这样做了,它就不起作用:
CSSearchableIndex.default().indexSearchableItems(searchableItems)
.
通过使用第二种方法(Core Spotlight),我可以在 Spotlight 搜索中看到我的所有结果,但是当我点击该项目时,我在 AppDelegate 方法中没有任何信息。
最糟糕的是:
po userActivity.activityType
"com.apple.corespotlightitem"
如果我打印 activityType,而不是我自己的,我会得到这个...
有什么建议吗?
当您的应用程序从 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
}
}
我同时使用 NSUserActivity 和 Core Spotlight 来索引我应用程序中的内容。 我使用 Core Spotlight 的原因是因为我想在 用户访问(打开)它之前 索引该内容。
我面临的问题是在 AppDelegate 方法中:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
基本上 userActivity
只有 包含正确的信息,当我在 viewController:
userActivity = myUserActivity
但如果我这样做了,它就不起作用:
CSSearchableIndex.default().indexSearchableItems(searchableItems)
.
通过使用第二种方法(Core Spotlight),我可以在 Spotlight 搜索中看到我的所有结果,但是当我点击该项目时,我在 AppDelegate 方法中没有任何信息。
最糟糕的是:
po userActivity.activityType
"com.apple.corespotlightitem"
如果我打印 activityType,而不是我自己的,我会得到这个...
有什么建议吗?
当您的应用程序从 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
}
}