问题
As mentioned at WWDC, iOS 11 should have support to index Core Data so that it is searchable via Spotlight. This is the WWDC presentation:
https://developer.apple.com/videos/play/wwdc2017/210/
However, after watching the video and looking at docs, I still have no idea how to setup my core data objects so they are searchable from the phones spotlight search.
I guess the main questions are:
1.) How do you actually set which attributes of a certain object type are searchable.
2.) How do you setup a NSCoreDataCoreSpotlightDelegate and get it to process the data? It looks like NSPersistentStore has a property
var coreSpotlightExporter: NSCoreDataCoreSpotlightDelegate
but it's readyonly :(
I couldn't find anything that explained this stuff clearly. Thanks!
回答1:
You do not set coreSpotlightExporter
directly. Instead, set the NSCoreDataCoreSpotlightExporter
option with your export delegate:
container.persistentStoreDescriptions.forEach {
$0.setOption(MyCoreDataCoreSpotlightDelegate(forStoreWith:$0, model: container.managedObjectModel), forKey:NSCoreDataCoreSpotlightExporter)
}
I added this code before calling loadPersistentStores(completionHandler:)
.
To set attributes and entities, you update the appropriate properties for NSAttributeDescription
and NSEntityDescription
or in your .xcdatamodeld
in the UI.
来源:https://stackoverflow.com/questions/45623020/in-ios-11-how-to-make-core-data-searchable-in-core-spotlight