Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In iOS 11, how to make core data searchable in core spotlight

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!

like image 950
NickDK Avatar asked Aug 10 '17 20:08

NickDK


1 Answers

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.

like image 97
Léo Natan Avatar answered Oct 30 '22 05:10

Léo Natan