Дублированное отображение NSUserActivity в Spotlight - PullRequest
1 голос
/ 28 сентября 2019

Я знаю, что есть несколько сообщений на эту тему, но они сильно отличались от моей проблемы.

Я пытаюсь отобразить мой NSUserActivity в Spotlight Search.Для моего NSUserActivity я использую три API: .isEligibleForHandoff, .isEligibleForSearch и .isEligibleForPrediction.

Моя проблема заключается в том, что моя активность отображается дважды в поиске Spotlight, и один из результатов даетпустой userInfo, а другой нет.Тем не менее, Руководство по программированию Apple предлагает:

Используйте следующие стратегии, чтобы избежать создания дублированных представлений одного элемента:

Если вы используете как NSUserActivity, так иБазовые API Spotlight для индексации элемента используют одно и то же значение для relatedUniqueIdentifier и uniqueIdentifier, чтобы связать представления элемента.

Но я не думаю, что это даже моя проблема, поскольку я не использую какие-либоБазовые API Spotlight.

Это мой код в моем 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 Search и убедиться, что тот, у которого установлено свойство userInfo, остается.

...