Дублированное отображение NSUserActivity в центре внимания

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

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

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

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

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

Но я не думаю, что это даже моя проблема, поскольку я не использую API-интерфейсы Core 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 и убедиться, что тот, у которого установлено свойство userInfo, остается.


person Prydwen    schedule 28.09.2019    source источник