Issue resolved with the following code. Might be helpful for future reference for anyone.
var coreDataProvider: PersistenceController = .shared
@State private var navigationSelection: Panel? = Panel.selectedView
@State private var searchedItem: CoreDataEntity = CoreDataEntity()
@State private var searchText: String = ""
@State private var isShowingDetailView: Bool = false
var body: some View {
ContentView(searchText: $searchText)
.onContinueUserActivity(CSSearchableItemActionType, perform: { activity in
// Navigate the search results to the respective view.
self.navigationSelection = .selectedView
guard let searchString = userActivity.userInfo?[CSSearchQueryString] as? String else {
return
}
// Spotlight search string
self.searchText = searchString
})
.onContinueUserActivity(CSSearchableItemActionType, perform: { activity in
self.navigationSelection = .selectedView
if let info = activity.userInfo,
let objectIdentifier = info[CSSearchableItemActivityIdentifier] as? String,
let objectURI = URL(string: objectIdentifier) {
let uri = objectURI
let container = coreDataProvider.persistentContainer
if let objectID = container.persistentStoreCoordinator.managedObjectID(forURIRepresentation: uri) {
if let item = container.viewContext.object(with: objectID) as? CoreDataEntity {
// Switch to the state corresponding to the item
self.searchedItem = item
self.isShowingDetailView = true
}
}
}
})
.sheet(isPresented: $isShowingDetailView) {
self.isShowingDetailView = false
} content: {
SpotlightResultsView(searchedItem: $searchedItem, isShowingDetailView: $isShowingDetailView)
}
}
Hope this is helpful and have fun!
Topic:
UI Frameworks
SubTopic:
General
Tags: