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)