Prydwen
Prydwen

Reputation: 541

Duplicated display of NSUserActivity in Spotlight

I know there are several posts on this topic out there but they differed to much from my problem.

I am trying to display my NSUserActivity in Spotlight Search. For my NSUserActivity I am using three APIs: .isEligibleForHandoff, .isEligibleForSearch and .isEligibleForPrediction.

My problem is that my activity is being displayed twice in the Spotlight Search and that one of the results delivers an empty userInfo and the other one doesn't. However the Apple Programming Guide suggests:

Use the following strategies to avoid creating duplicate representations of a single item:

If you’re using both NSUserActivity and Core Spotlight APIs to index an item, use the same value for relatedUniqueIdentifier and uniqueIdentifier to link the representations of the item.

But I don't think this is even my problem since I am not using any Core Spotlight APIs.

Thats my code inside my UIResponder class:

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()

Note: The updateUserActivityState(activity:) method is getting called twice in a row.

So how can I void getting multiple search results in the Spotlight Search and make sure the one which has the userInfo property set stays.

Upvotes: 1

Views: 126

Answers (0)

Related Questions