ios RealmSwift选择器列表不允许选择当前值

sr4lhrrt  于 2023-05-30  发布在  iOS
关注(0)|答案(1)|浏览(149)

我有一个RealmSwift应用程序,我正在摆弄,并且在选择任何对象值时遇到了麻烦。
基本对象:

class Event: Object, ObjectKeyIdentifiable {
    @Persisted(primaryKey: true) var _id: ObjectId

    @Persisted var short_description: String = ""
    @Persisted var long_description: String = ""
    @Persisted var created_by: String = ""
    @Persisted var created_by_email: String? = ""
    @Persisted var created_date: Date = Date()
    @Persisted var event_type: EventType?
}
class EventType: Object, ObjectKeyIdentifiable {
    @Persisted(primaryKey: true) var _id: ObjectId
    
    @Persisted var name: String
    @Persisted var type_description: String

}

在尝试创建一个新的Event时,Picker显示的很好,为集合中的每个条目提供值,但是,它不允许我选择任何EventType。

struct CreateEventView: View {
    @ObservedResults(Event.self) var events
    @ObservedResults(EventType.self) var eventTypes

    @State private var newEvent = Event()
    @Binding var isInCreateEventView: Bool
    @State var user: User
    @State var short_description = ""
    @State var long_description = ""
    @State var selected_event_type: ObjectId?

    var body: some View {
        Form {
            Section(header: Text("New Event Details")) {
                TextField("Short Description", text: $short_description)
                Picker("Event Type", selection: $selected_event_type) {
                    Text("Select Event Type").tag(ObjectId?.none)
                    ForEach(eventTypes) { eventType in
                        Text(eventType.name).tag(eventType._id)
                    }
                }
                Text("Selected Event Type: \(selected_event_type != nil ? String(describing: selected_event_type!) : "No Selected Event Type")")
                TextField("Long Description", text: $long_description)
            }
            Section {
                Button(action: {
                    newEvent.created_by = user.id
                    newEvent.created_by_email = user.profile.email
                    newEvent.short_description = short_description
                    newEvent.event_type = eventTypes.first(where: { $0._id == selected_event_type })
                    newEvent.long_description = long_description
                    newEvent.created_date = Date()
                    $events.append(newEvent)
                    isInCreateEventView = false
                }) {
                    HStack {
                        Spacer()
                        Text("Save")
                        Spacer()
                    }
                }
                Button(action: {
                    print(eventTypes)
                    isInCreateEventView = false
                }) {
                    HStack {
                        Spacer()
                        Text("Cancel")
                        Spacer()
                    }
                }
            }
        }
        .navigationBarTitle("Add Event")
    }
}

我已经把头撞在这上面好几天了,不能让事情正常运转。任何帮助将不胜感激。选择器可以很好地显示值,但是当我点击任何弹出的值时,它只会返回默认的“无”选择。

py49o6xq

py49o6xq1#

我想,我刚问完,就想到了一个有效的解决方案。我将变量声明调整为:

@State private var selected_event_type: EventType?

将拾取器元素修改为:

Picker("Event Type", selection: $selected_event_type) {
    ForEach(eventTypes) { eventType in
        Text(eventType.name).tag(eventType as EventType?)
    }
}

和事件对象的赋值如下:

newEvent.event_type = selected_event_type

相关问题