核心数据 NSManagedObject - ObservedObjects 未更新
Posted
技术标签:
【中文标题】核心数据 NSManagedObject - ObservedObjects 未更新【英文标题】:Core Data NSManagedObject - ObservedObjects not updating 【发布时间】:2020-07-21 16:48:05 【问题描述】:我有一个数据输入视图,允许用户添加图像并在添加后查看预览。
ImagePickerView
我返回了一个UIImage
,我通过.pngData
转换器将它作为Data
类型保存到Core Data。但是,选择图像后,即使我使用@ObservedObject
和objectWillChange
,视图也不会更新以显示它
我不能使用@State
,因为草稿对象是NSManagedObject
import SwiftUI
import CoreData
struct AddItemView: View
@Environment(\.managedObjectContext) var moc
@Environment (\.presentationMode) var presentationMode
@State var showImagePicker: Bool = false
@ObservedObject var draft: Item //Core Data entity
var body: some View
NavigationView
VStack
if (draft.image != nil)
Image(uiImage: UIImage(data: draft.image!)!)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: UIScreen.main.bounds.width - 32, height: UIScreen.main.bounds.height / 4)
.clipShape(RoundedRectangle(cornerRadius: 20))
else
Button(action:
self.showImagePicker = true
, label:
RoundedRectangle(cornerRadius: 20)
)
.padding([.all], 20)
.sheet(isPresented: $showImagePicker)
ImagePickerView(sourceType: .photoLibrary) image in
draft.objectWillChange.send()
draft.image = image.pngData()
【问题讨论】:
【参考方案1】:尝试使用objectWillChange.send()
在您做出更改后:
.sheet(isPresented: $showImagePicker)
ImagePickerView(sourceType: .photoLibrary) image in
draft.image = image.pngData() // #1
draft.objectWillChange.send() // #2
【讨论】:
hmm.. 不幸的是,即使在重新排列它们之后,这对我来说也以同样的行为结束以上是关于核心数据 NSManagedObject - ObservedObjects 未更新的主要内容,如果未能解决你的问题,请参考以下文章