Доступ к domainIdentifier из NSUserActivity с помощью Spotlight

Я индексирую объекты "Персона" и "Продукт" в Spotlight следующим образом:

// Person
let personItem = CSSearchableItem(uniqueIdentifier: personID, domainIdentifier: "person", attributeSet: attributeSet)                

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([personItem]) { (error: NSError?) -> Void in
    if let error = error {
        print("Indexing error: \(error.localizedDescription)")
    } else {
        print("person added to spotlight")
    }
}


// Product
let productItem = CSSearchableItem(uniqueIdentifier: productID, domainIdentifier: "product", attributeSet: attributeSet)                

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([productItem]) { (error: NSError?) -> Void in
    if let error = error {
        print("Indexing error: \(error.localizedDescription)")
    } else {
        print("product added to spotlight")
    }
}

Вы можете видеть, что я использую для domainIdentifiers: "человек" и "продукт". Но как бы я получить доступ к этим domainIdentifierКогда я вернусь в приложение?

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {

        // if product do this
        // if person do that

    }

    return true
}

1 ответ

Решение

Из того, что я знаю, в CoreSpotlight у вас нет прямого доступа к domainIdentifier, Что у вас есть uniqueIdentifier, так что вы можете обойти это с каким-то префиксом. Для получения идентификатора вы можете использовать:

if let itemActivityIdentifier = userActivity.userInfo?["kCSSearchableItemActivityIdentifier"] {

}

в вашем AppDelegate,

Другие вопросы по тегам