【问题标题】:SwiftUI - Using CoreData Fetched Result to Populate PickerSwiftUI - 使用 CoreData 获取的结果来填充选取器
【发布时间】:2019-09-19 21:18:13
【问题描述】:

我正在按照我在网上看到的每个指南将托管对象引入到带有环境的 SwiftUI 场景中,然后在场景中运行 @FetchRequest,这一切都很好。

我可以使用该结果来填充选择器的值

这就是我所拥有的

CoreData 对象

    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)

不要做任何改变

【问题讨论】:

    标签: ios core-data uipickerview swiftui


    【解决方案1】:

    您需要将值设为可选字符串,因为这就是 primaryKeyId 的类型

    @Binding var value: String?
    

    然后你需要在选择器的每个元素上加上一个标签来设置选择:

    Text(data.value ?? "Unknown").tag(data.primaryKeyId)
    

    【讨论】:

    • 在 SwiftUI 中的这两个变化都不走运
    • 应该是.tag(data.primaryKeyId)
    • 是我,我试过“@Binding var value: String”而不是@Binding var value: String?现在一切都好,谢谢!
    猜你喜欢
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多