我有一个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.") } }
将项目添加到索引后,所有项目都可通过聚光灯搜索进行搜索.appDelegate
选择索引项时处理操作的函数.
因此,在我编辑或删除NSManagedObject
应用程序内部之前,一切似乎都很好,因为Searchable Items Index
索引中列出的项目不是最新的,并且仍然列出已删除/旧数据.
那么如何在CSSearchableIndex
更新时NSManagedObject
更新项目?
如果您希望索引相关,则保持索引最新是至关重要的.每次使用Core Data执行此类操作时,都必须在索引中添加/删除项目.在从Core Data中删除之前,应使用以下方法从索引中删除项目.您还可以在CoreSpotlight文档中找到许多有用的信息.
- deleteSearchableItemsWithIdentifiers:completionHandler: