SwiftUI Picker возвращает пустую строку из CoreData - PullRequest
1 голос
/ 06 августа 2020

Как это улучшить? Средство выбора возвращает пустую строку, когда я использую ForEach (сущности CoreData). Если я использую testing[String], все работает нормально

import SwiftUI

struct AddTask: View {
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Goal.entity(), sortDescriptors: []) var goals: FetchedResults<Goal>
    
    @State private var taskName: String = ""
    @State private var originGoal = ""
    private let testGoal = ["Alpha", "Bravo", "Charlie"]
    
    var body: some View {
        NavigationView {
            Form {
                Section{
                    TextField("Enter Task Name", text: $taskName)
                }
                Section {
                    Picker(selection: $originGoal, label: Text("Choose Goal")) {
                        ForEach(goals, id: \.self) { goal in
                            Text(goal.wrappedName)
                        }
                    }
                }
            }
        }
        
        Button("Add") {
            let task1 = Task(context: self.moc)
            task1.name = taskName
            task1.origin = Goal(context: self.moc)
            task1.origin?.name = originGoal
            
            try? self.moc.save()
        }
    }
}

Или, может быть, есть хорошие альтернативы для SwiftUI Picker?

1 Ответ

0 голосов
/ 06 августа 2020

selection и id должны быть одного типа в Picker, поэтому попробуйте (не можете проверить свой код):

Section {
    Picker(selection: $originGoal, label: Text("Choose Goal")) {
        ForEach(goals, id: \.wrappedName) { goal in
            Text(goal.wrappedName)
        }
    }
}

иногда также tag работает (но не сообщалось всегда), так что попробуйте

Section {
    Picker(selection: $originGoal, label: Text("Choose Goal")) {
        ForEach(goals, id: \.self) { goal in
            Text(goal.wrappedName).tag(goal.wrappedName)
        }
    }
}
...