在 EditView 中使用 CoreData 中的值预填充 SwiftUI 表单

Posted

技术标签:

【中文标题】在 EditView 中使用 CoreData 中的值预填充 SwiftUI 表单【英文标题】:Prefilling a SwiftUI form with values from CoreData in EditView 【发布时间】:2020-04-23 12:11:51 【问题描述】:

我有一个 EditView,它会发送一个由 CoreData 保存的“Person”。

import SwiftUI
import CoreData

struct EditPersonView: View 
    @Environment(\.managedObjectContext) var moc
    @Environment(\.presentationMode) var presentationMode
    @ObservedObject var person: Person

    var body: some View 
        NavigationView 
            Form 
                Section 
                    TextField("Name", text: self.$person.name) // this does not work
                    Toggle(isOn: self.$person.isHome)  // this works
                        Text("Is home")
                    
                
                Section 
                    Button("Save") 
                        try? self.moc.save()
                        self.presentationMode.wrappedValue.dismiss()
                    
                    .disabled(self.name.isEmpty)
                    Button("Cancel") 
                        self.presentationMode.wrappedValue.dismiss()
                    
                
            
            .navigationBarTitle("Edit Person")
        
    

“is home”的值从 CoreData 的值正确初始化,我可以更改并保存它,这很好。

我的问题是名称属性。我收到以下错误:“无法将 'Binding' 类型的值转换为预期的参数类型 'Binding'”

我做错了什么?

【问题讨论】:

你能分享你从 Core Data 填充的代码吗 【参考方案1】:

答案在这里:

https://www.hackingwithswift.com/books/ios-swiftui/creating-nsmanagedobject-subclasses

在创建我自己的 NSManagedObject 子类并删除它起作用的可选项之后。

如果您想继续使用 CoreData 的 Class 定义,另一个答案: https://forums.swift.org/t/promoting-binding-value-to-binding-value/31055

【讨论】:

以上是关于在 EditView 中使用 CoreData 中的值预填充 SwiftUI 表单的主要内容,如果未能解决你的问题,请参考以下文章

Android EditView用法小结

Android EditView用法小结

android去掉EditView的默认焦点问题

获取EditView内容的陷阱

EditView不可编辑状态和可编辑状态动态切换 及 EditView的其它特效

android 使用Handler更新TextView时 手动编辑EditView时根本输入不了任何东西