我知道有几篇关于这个主题的帖子,但它们与我的问题有很大不同。
我正在尝试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
保留具有属性集的搜索结果。