首页 > 解决方案 > 在 Spotlight 中重复显示 NSUserActivity

问题描述

我知道有几篇关于这个主题的帖子,但它们与我的问题有很大不同。

我正在尝试NSUserActivity在 Spotlight 搜索中显示我的。对于我来说NSUserActivity,我使用了三个 API .isEligibleForHandoff.isEligibleForSearch.isEligibleForPrediction.

我的问题是我的活动在 Spotlight 搜索中显示了两次,其中一个结果提供了一个空的 userInfo,而另一个没有。但是Apple Programming Guide建议:

使用以下策略来避免创建单个项目的重复表示:

如果您同时使用 NSUserActivity 和 Core Spotlight API 来索引项目,请为相关唯一标识符和唯一标识符使用相同的值来链接项目的表示。

但我认为这甚至不是我的问题,因为我没有使用任何 Core Spotlight API。

那是我在UIResponder课堂上的代码:

let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributeSet.title = "Place Order Search"
attributeSet.contentDescription = "Get Your Avocado Toast Now"
attributeSet.relatedUniqueIdentifier = ActivityType.placeOrder.rawValue

let avocadoToastDictionary = AvocadoToastManger.dictionary(from: avocadoToastOrder)
let jsonAvocadoToastData = json(from: avocadoToastDictionary)
let activity = NSUserActivity(activityType: ActivityType.placeOrder.rawValue)
activity.title = "Place Order"
activity.userInfo = ["PlaceOrder.avocadoToast": jsonAvocadoToastData]
activity.requiredUserInfoKeys = ["PlaceOrder.avocadoToast"]
activity.suggestedInvocationPhrase = "Order an Avocado Toast"
activity.keywords = ["Order", "Avocado Toast"]
activity.isEligibleForHandoff = true
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.contentAttributeSet = attributeSet

self.userActivity = activity
activity.becomeCurrent()

注意:该updateUserActivityState(activity:)方法被连续调用两次。

那么如何避免在 Spotlight 搜索中获得多个搜索结果,并确保userInfo保留具有属性集的搜索结果。

标签: corespotlightnsuseractivityhandoff

解决方案


推荐阅读