В чем разница между CSSearchableIndex и NSUserActivity в API поиска? Как часто звоните?

Я вижу ниже код в iOS9Sampler для использования Search API в iOS 9. Он использует оба NSUserActivity а также CSSearchableIndex, Поэтому я хочу задать вопрос:

  1. Когда следует использовать NSUserActivityкогда следует использовать CSSearchableIndex? Я вижу, что это делает тот же результат, когда поиск в Spotlight.
  2. Ниже кода звоните каждый viewDidLoad зрения контроллера. Это правильно? Или стоит позвонить только один раз? Как я могу проверить, чтобы позвонить один раз?

NSUserActivity

    let activityType = String(format: "%@.%@", uniqueIdentifier, domainIdentifier)
    activity = NSUserActivity(activityType: activityType)
    activity.title = "iOS-9-Sampler_NSUserActivity"
    activity.keywords = Set<String>(arrayLiteral: "dog", "cat", "pig", "sheep")
    activity.eligibleForSearch = true
    activity.becomeCurrent()

Основной прожектор

    let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeImage as String)
    attributeSet.title = "iOS-9-Sampler_CoreSpotlight"
    attributeSet.contentDescription = "iOS-9-Sampler is a code example collection for new features of iOS 9."
    attributeSet.keywords = ["dog", "cat", "bird", "fish"]
    let image = UIImage(named: "m7")!
    let data = UIImagePNGRepresentation(image)
    attributeSet.thumbnailData = data

    let searchableItem = CSSearchableItem(
        uniqueIdentifier: uniqueIdentifier,
        domainIdentifier: domainIdentifier,
        attributeSet: attributeSet)

    CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([searchableItem]) { (error) -> Void in
        if error != nil {
            print("failed with error:\(error)\n")
        }
        else {
            print("Indexed!\n")
        }
    }

1 ответ

Решение

Тип контента, который вы индексируете, и то, как пользователь взаимодействует с ним, определят, целесообразно ли его использовать. NSUserActivity или же CSSearchableItem,

Это объясняется в Руководстве по программированию поиска приложений, и приведены примеры для нескольких различных сценариев, поэтому обязательно внимательно изучите их. Некоторые заметки:

  • использование NSUserActivity индексировать элементы по мере того, как пользователи выполняют действия в вашем приложении, такие как посещение точки навигации или создание и просмотр контента.
  • Используйте Core Spotlight для добавления содержимого, специфичного для приложения, в указатель на устройстве, такого как постоянные пользовательские данные - документы, фотографии и другие типы содержимого.
  • CSSearchableItem не требует от пользователя посещения контента, в отличие от NSUserActivity,
  • CSSearchableItem не является публично индексируемым, в то время как NSUserActivityявляется.
Другие вопросы по тегам