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

1

6

As mentioned at WWDC, iOS 11 should have support to index CoreData 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!

Janeanjaneczka answered 10/8, 2017 at 20:35 Comment(1)
See my answer for how to use NSCoreDataCoreSpotlightDelegate.Papillote
E
8

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.

Erena answered 11/8, 2017 at 16:14 Comment(1)
The one would need to check the spotlight support in the UI for properties and display expression for entities.Mahatma

© 2022 - 2024 — McMap. All rights reserved.