SwiftUI - 使用 CoreData 获取的结果来填充选择器
SwiftUI - Using CoreData Fetched Result to Populate Picker
我正在按照我在网上看到的每一个指南将托管对象引入带有环境的 SwiftUI 场景,然后 运行 场景中的 @FetchRequest,一切都很好。
我可以使用该结果来填充选择器的值
这是我的
核心数据对象
public class CD_LookupData: NSManagedObject,Identifiable {}
extension CD_LookupData {
@nonobjc public class func fetchRequest() -> NSFetchRequest<CD_LookupData> {
return NSFetchRequest<CD_LookupData>(entityName: "CD_LookupData")
}
@NSManaged public var lookluptable: String?
@NSManaged public var primarykeyid: String?
@NSManaged public var value: String?
}
SwiftUI 视图
struct LabledSelectBoxCD: View {
var label: String
var lookupdata: FetchedResults<CD_LookupData>
@Binding var value: Int
var body: some View
{
VStack(alignment: .leading)
{
Picker(selection: $value, label: Text(""))
{
ForEach(lookupdata, id: \.primarykeyid)
{ data in
Text(data.value ?? "Unknown")
}
}
}
}
}
它用值填充选择器就好了,但我的默认值从来没有用过,也没有保存任何选择的值。
如果我只使用一个字符串数组尝试相同的视图,它会完美运行。
关于如何让它使用 primarykeyid 的值作为选择器的值的任何想法?
更新:
@Binding var value: String
和
Text(data.value ?? "Unknown").tag(data.primarykeyid)
不要做任何改变
您需要将您的值设置为可选字符串,因为这就是 primaryKeyId 类型
@Binding var value: String?
然后您需要在选择器的每个元素上添加一个标签来设置选择:
Text(data.value ?? "Unknown").tag(data.primaryKeyId)
我正在按照我在网上看到的每一个指南将托管对象引入带有环境的 SwiftUI 场景,然后 运行 场景中的 @FetchRequest,一切都很好。
我可以使用该结果来填充选择器的值
这是我的
核心数据对象
public class CD_LookupData: NSManagedObject,Identifiable {}
extension CD_LookupData {
@nonobjc public class func fetchRequest() -> NSFetchRequest<CD_LookupData> {
return NSFetchRequest<CD_LookupData>(entityName: "CD_LookupData")
}
@NSManaged public var lookluptable: String?
@NSManaged public var primarykeyid: String?
@NSManaged public var value: String?
}
SwiftUI 视图
struct LabledSelectBoxCD: View {
var label: String
var lookupdata: FetchedResults<CD_LookupData>
@Binding var value: Int
var body: some View
{
VStack(alignment: .leading)
{
Picker(selection: $value, label: Text(""))
{
ForEach(lookupdata, id: \.primarykeyid)
{ data in
Text(data.value ?? "Unknown")
}
}
}
}
}
它用值填充选择器就好了,但我的默认值从来没有用过,也没有保存任何选择的值。
如果我只使用一个字符串数组尝试相同的视图,它会完美运行。
关于如何让它使用 primarykeyid 的值作为选择器的值的任何想法?
更新:
@Binding var value: String
和
Text(data.value ?? "Unknown").tag(data.primarykeyid)
不要做任何改变
您需要将您的值设置为可选字符串,因为这就是 primaryKeyId 类型
@Binding var value: String?
然后您需要在选择器的每个元素上添加一个标签来设置选择:
Text(data.value ?? "Unknown").tag(data.primaryKeyId)