在 SwiftUI Picker 中为 NSManagedObject 设置默认值?

Posted

技术标签:

【中文标题】在 SwiftUI Picker 中为 NSManagedObject 设置默认值?【英文标题】:Setting a default value for an NSManagedObject in SwiftUI Picker? 【发布时间】:2020-08-17 01:14:13 【问题描述】:

我正在使用 SwiftUI 中的 Picker 从核心数据列表NSManagedObjects 中进行选择,但无法让选择器显示默认值。选择后也不会设置新值。有没有办法让选择器显示默认值?

这里是设置我的 NSManagedObject 属性的地方。

extension Company 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Company> 
        return NSFetchRequest<Company>(entityName: "Company")
    

    @NSManaged public var id: UUID?
    @NSManaged public var name: String?
    @NSManaged public var companyContacts: NSSet?
    @NSManaged public var companyRoles: NSSet?

    //...


这就是我尝试使用它的地方。

struct AddRoleSheet: View 
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(
        entity: Company.entity(),
        sortDescriptors: [
            NSSortDescriptor(keyPath: \Company.name, ascending: true)
        ]
    ) var companies: FetchedResults<Company>

//...

@State var company: Company? = // Can I put something here? Would this solve my problem?

//...

var body: some View 
    NavigationView 
        Form 
            Section 
                Picker(selection: $company, label: Text("Company")) 
                    List 
                        ForEach(companies, id: \.self)  company in
                            company.name.map(Text.init)
                        
                    
                
                //...
            
        
        //...
    

【问题讨论】:

【参考方案1】:

View.init 阶段还没有获取到结果,请尝试以下操作

@State var company: Company? = nil   // << just initialize

//...

var body: some View 
    NavigationView 
        Form 
            Section 
                Picker(selection: $company, label: Text("Company")) 
                    List 
                        ForEach(companies, id: \.self)  company in
                            company.name.map(Text.init)
                        
                    
                
                //...
            
        
    .onAppear 
       // here companies already fetched from database
       self.company = self.companies.first      // << assign any needed
    

【讨论】:

以上是关于在 SwiftUI Picker 中为 NSManagedObject 设置默认值?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 为啥 Picker 上的输入不起作用?

SwiftUI 中的一排 Picker ***,为啥拖动滚动区域从屏幕上的 Picker 控件偏移?

iOS 15 SwiftUI 3 Picker 绑定在更改@State 值后不起作用

在 SwiftUI 中隐藏 Picker 在 watchOS 上的焦点边界

在 SwiftUI 中,我如何知道 Picker 选择何时更改?为啥 didSet 不起作用?

SwiftUI Picker 在同一视图中更改第二个状态变量