【发布时间】:2021-11-25 22:48:21
【问题描述】:
我有以下代码:
import SwiftUI
struct LearnView: View {
@State private var selectedLanguage: Language?
@State private var selectedCategory: SubCategory?
@State private var selectedDate = Date()
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(entity: Language.entity(), sortDescriptors: []) var languages: FetchedResults<Language>
@FetchRequest(entity: SubCategory.entity(), sortDescriptors: []) var subCategories: FetchedResults<SubCategory>
var body: some View {
NavigationView {
ZStack {
Form {
Section("Learning Schedule") {
Picker("Please choose a language", selection: $selectedLanguage) {
ForEach(languages, id: \.self) {
Text($0.name ?? "Unknown")
}
}
Text("You selected: \(selectedLanguage?.name ?? "Unknown")")
}
}
}
}
}
}
我可以点击表单行,然后看到来自 CoreData 'languages' 实体的语言列表。但是,当我在导航到的视图中点击选择器中的一种语言时,它不会对它打上复选标记,而是根据我的选择返回表单屏幕。它只是在“您选择:”文本字段中显示“未知”。
语言和子类别实体:
【问题讨论】:
-
没有足够的代码来重现这一点(例如查看语言和子类别),这有点像猜谜游戏。我的猜测是
Picker可能很难匹配id和选择参数。实体是否具有可以使用而不是.self的显式 ID?你能用.id()将它们添加到Text吗? -
@jnpdx 我认为实体没有明确的 ID,查看 CoreData 实体条目(我已在添加的屏幕截图中显示。
-
所有实体(NSManagedObject 子类)都有一个来自其超类的 ID,名为
objectID,因此您可以使用tag($0.objectID)标记您的对象,但从我的测试来看,这没有帮助。 -
@Joakim Danielson 试过了,但没什么区别。
标签: swift core-data swiftui picker