NSUserActivity против Core Spotlight, глубокая ссылка

Я использую NSUserActivity и Core Spotlight для индексирования контента в моем приложении. Причина, по которой я использую Core Spotlight, заключается в том, что я хочу проиндексировать этот контент до того, как пользователь получит к нему доступ (откроет).

Проблема, с которой я сталкиваюсь, заключается в методе AppDelegate: func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool

В принципе userActivity ТОЛЬКО содержит правильную информацию, когда я делаю это в моем viewController:

userActivity = myUserActivity

Но это не работает, если я делаю:

CSSearchableIndex.default().indexSearchableItems(searchableItems),

Используя второй метод (Core Spotlight), я могу видеть все свои результаты в поиске Spotlight, но когда я нажимаю на элемент, у меня нет никакой информации в методе AppDelegate.

Худшая часть это:

po userActivity.activityType "com.apple.corespotlightitem"

Если я печатаю активность типа, вместо того, чтобы получить свой собственный, я получаю этот...

Какие-либо предложения?

1 ответ

Решение

Когда ваше приложение запускается из результатов CoreSpotlight, вы получаете CSSearchableItemActionType,

Вы должны обработать этот тип действия путем извлечения CSSearchableItemActivityIdentifier - Это значение будет соответствовать идентификатору, который вы указали для элемента поиска, когда вы отправили его в индекс.

Что-то вроде:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        guard let selectedItem = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
            return
        }
        // Do something with selectedItem
    }
}
Другие вопросы по тегам