У меня есть приложение, которое использует Core Spotlight
для индексации содержимого приложения. Приложение также использует Core Data
, а при создании NSManagedObject
детали объекта используются для CSSearchableItem
, а затем добавляются к Spotlight Search Index
.
Дело в том, что у меня сложилось впечатление, что для NSManagedObject
и CSSearchableItem
нет ссылки на направление, поэтому, когда элемент добавляется в индекс, он просто копирует детали.
Вот пример добавления элемента в указатель.
//Spotlight Index Search
// Create an attribute set to describe an item.
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeData as String)
// Add metadata that supplies details about the item.
attributeSet.title = "\(object.title)"
attributeSet.contentDescription = "\(object.description)"
// Create an item with a unique identifier, a domain identifier, and the attribute set you created earlier.
let item = CSSearchableItem(uniqueIdentifier: "1", domainIdentifier: "ObjectType", attributeSet: attributeSet)
// Add the item to the on-device index.
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in
if error != nil {
print(error?.localizedDescription)
}
else {
print("Item indexed.")
}
}
После добавления элемента в индекс все элементы доступны для поиска с помощью поиска Spotlight. Функция в appDelegate
заботится о действиях при выборе элементов указателя.
Таким образом, все выглядит нормально, пока я не отредактирую или не удалю NSManagedObject
в приложении, потому что Searchable Items Index
не обновляет индекс, элементы, перечисленные в индексе, не обновлены и по-прежнему перечисляют удаленные/старые данные.
Итак, как я могу обновлять CSSearchableIndex
элементов при обновлении NSManagedObject
?