SwiftUI - 使用 CoreData 获取的结果来填充选取器
Posted
技术标签:
【中文标题】SwiftUI - 使用 CoreData 获取的结果来填充选取器【英文标题】:SwiftUI - Using CoreData Fetched Result to Populate Picker 【发布时间】: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)
不要做任何改变
【问题讨论】:
【参考方案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?现在一切都好,谢谢!以上是关于SwiftUI - 使用 CoreData 获取的结果来填充选取器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中从 FetchedResults (CoreData) 中获取 NSOrderedSet
SwiftUI CoreData - 如何更新获取请求和列表
SwiftUI 中的 CoreData:如何清楚地获取属性?