How/Where 将核心数据实体变量分配给结构是 SwiftUI 中的 @State 变量吗?
How/Where to assign CoreData entity's variable to structs's @State variable in SwiftUI?
我使用@State 变量(title, description) 与其他视图(UITextView) 进行通信。该视图有一个绑定字符串变量 (text).
我想使用特定的 CoreData 实体 (Item) 来更新我的 @State 变量,因此 UITextView 中的文本会在视图出现时更新(因此 UITextView 不会显示为空白)。据我所知,我首先应该以某种方式将该 CoreData 实体变量分配给我的 @State 变量,当我从 UITextView 获得关于我的 @State 变量的更新时,我应该将上下文保存到我的 CoreData 实体。我使用 init() 进行初始分配,在进行实时预览调试之前我没有收到任何错误。我收到此错误(作为调试器消息):
Failed to call designated initializer on NSManagedObject class 'Item'
此外,预览中缺少文字。
也许还有其他方法可以满足我的要求?
这是我的代码:
主视图
struct DetailView: View {
@ObservedObject var item: Item = Item()
@State private var title = ""
@State private var description = ""
init (item: Note)
{
self.item = item
self.title = item.title!
...
TextView(text: self.$title...
...
TextView(text: self.$details...
...
TextView
struct TextView: UIViewRepresentable {
@Binding var text: String
...
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
...
P.S。当我在 CoreData 实体的 属性(例如 self.item.title)中直接传递(忽略我的 @State 变量的存在)作为显示文本的 UITextView 的参数时,它确实有效但我不知道如何保存更改UITextView直接转为CoreData实体
有几种方法可以做到这一点。
有很多教程的 @FetchedRequest
方法。
https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-fetchrequest-property-wrapper
使用该方法,您将传递正在编辑的 users
对象。
此外,您可以使用 FetchedResultsController
。
https://www.youtube.com/watch?v=-U-4Zon6dbE
这样你就可以拥有一个 @ObservableObject
和 CoreData
个对象
https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller
一个ManagedObject
或CoreData
对象已经符合ObservableObject
https://developer.apple.com/documentation/coredata/nsmanagedobject
你不需要把它放在一个 @State
你只需要从 CoreData 传递获取的对象。
此外,当用户使用完对象后,您需要 save
managedObjectContext
。
我使用@State 变量(title, description) 与其他视图(UITextView) 进行通信。该视图有一个绑定字符串变量 (text).
我想使用特定的 CoreData 实体 (Item) 来更新我的 @State 变量,因此 UITextView 中的文本会在视图出现时更新(因此 UITextView 不会显示为空白)。据我所知,我首先应该以某种方式将该 CoreData 实体变量分配给我的 @State 变量,当我从 UITextView 获得关于我的 @State 变量的更新时,我应该将上下文保存到我的 CoreData 实体。我使用 init() 进行初始分配,在进行实时预览调试之前我没有收到任何错误。我收到此错误(作为调试器消息):
Failed to call designated initializer on NSManagedObject class 'Item'
此外,预览中缺少文字。
也许还有其他方法可以满足我的要求?
这是我的代码:
主视图
struct DetailView: View {
@ObservedObject var item: Item = Item()
@State private var title = ""
@State private var description = ""
init (item: Note)
{
self.item = item
self.title = item.title!
...
TextView(text: self.$title...
...
TextView(text: self.$details...
...
TextView
struct TextView: UIViewRepresentable {
@Binding var text: String
...
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
...
P.S。当我在 CoreData 实体的 属性(例如 self.item.title)中直接传递(忽略我的 @State 变量的存在)作为显示文本的 UITextView 的参数时,它确实有效但我不知道如何保存更改UITextView直接转为CoreData实体
有几种方法可以做到这一点。
有很多教程的 @FetchedRequest
方法。
https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-fetchrequest-property-wrapper
使用该方法,您将传递正在编辑的 users
对象。
此外,您可以使用 FetchedResultsController
。
https://www.youtube.com/watch?v=-U-4Zon6dbE
这样你就可以拥有一个 @ObservableObject
和 CoreData
个对象
https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller
一个ManagedObject
或CoreData
对象已经符合ObservableObject
https://developer.apple.com/documentation/coredata/nsmanagedobject
你不需要把它放在一个 @State
你只需要从 CoreData 传递获取的对象。
此外,当用户使用完对象后,您需要 save
managedObjectContext
。