【问题标题】:Core Data NSManagedObject - ObservedObjects not updating核心数据 NSManagedObject - ObservedObjects 未更新
【发布时间】:2020-07-21 16:48:05
【问题描述】:

我有一个数据输入视图,允许用户添加图像并在添加后查看预览。

ImagePickerView 我返回了一个UIImage,我通过.pngData 转换器将它作为Data 类型保存到Core Data。但是,选择图像后,即使我使用@ObservedObjectobjectWillChange,视图也不会更新以显示它

我不能使用@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()
                }
            }

            
        }
    }
}

【问题讨论】:

    标签: ios swift core-data swiftui


    【解决方案1】:

    尝试使用objectWillChange.send()您做出更改后:

    .sheet(isPresented: $showImagePicker) {
        ImagePickerView(sourceType: .photoLibrary) { image in
            draft.image = image.pngData() // #1
            draft.objectWillChange.send() // #2
        }
    }
    

    【讨论】:

    • hmm.. 不幸的是,即使在重新排列它们之后,这对我来说也以同样的行为结束
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多