[SOLVED] SwiftUI Picker from CoreData Values

Issue

I have a CoreData table called Users that contains, among other things, the name of the user. It’s been added to my SwiftUI file with

@Environment(\.managedObjectContext) private var viewContext

@FetchRequest(
    sortDescriptors: [],
    animation: .default)
private var users: FetchedResults<Users>

I have a picker that uses a ForEach loop and populates the picker with the names from the Users table.

@State var selectedUser = ""
Picker("Select user", selection: $selectedUser) {
        ForEach(users) { user in
            Text(user.name!)
        }
    }
    .pickerStyle(.menu)
Text(selectedUser)

Populating the picker does work. However the selected value is not saved properly. When I select something, it doesn’t show up in the text area, and in debugging mode, it shows that the selectedUser variable remains the empty string.

I can’t seem to figure out how to get this working.

Solution

Change your select property to be a User and make it optional (since nothing is selected when the view is opened)

@State var selectedUser: User?

Then you need to use .tag in your picker so the selected user can be correctly assigned to selectedUser

Picker("Select user", selection: $selectedUser) {
    ForEach(users) { user in
        Text(user.name!)
        .tag(Optional(user))
    }
}
.pickerStyle(.menu)

Note that the user variable needs to be made optional in the tag so its type matches the type of selectedUser

Answered By – Joakim Danielson

Answer Checked By – Jay B. (BugsFixing Admin)

Leave a Reply

Your email address will not be published.