ios - 核心数据 NSManagedObject - ObservedObjects 未更新
问题描述
我有一个数据输入视图,可让用户添加图像并在这样做后查看预览。
我ImagePickerView
返回了一个我通过转换器UIImage
保存到核心数据的类型。但是,选择图像后,即使我正在使用,视图也不会更新以显示它Data
.pngData
@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()
}
}
}
}
}
解决方案
进行更改objectWillChange.send()
后尝试使用:
.sheet(isPresented: $showImagePicker) {
ImagePickerView(sourceType: .photoLibrary) { image in
draft.image = image.pngData() // #1
draft.objectWillChange.send() // #2
}
}
推荐阅读
- scala - 如何从 Scala 中的数组创建 DataFrame?
- php - 如何在刀片视图中访问对象(stdClass)
- excel - Range.Find 根据条件返回正确的值
- javascript - 登录时没有为 axios 拦截器附加会话令牌
- jquery - 如何在 jquery 中从 var 值(2020 年 3 月 10 日)设置输入日期?
- wpf - 在 ScrollViewer 中控制 Canvas 的大小
- sql - 以相同编号开始的行分组到单行 MS Access SQl
- hash - PDF 的相同内容具有不同的哈希值
- mule - 在 mule 中连接两个数组
- dataframe - 从 parquet 文件创建的 hive 表不显示任何数据,即使 parquet 文件中有数据