首页 > 解决方案 > 如何修复无法从 Core Data 获取图像的错误?

问题描述

我想获取从照片库中挑选并保存的图像,但是在获取图像数据时遇到了麻烦。当我调试时,日志说“保存的图像”,但在 DetailViewController 中,“没有图像获取”。你有什么想法让我想念什么吗?谢谢

核心数据

在此处输入图像描述

数据管理器:与保存和获取备忘录相关的方法的一部分。

class DataManager {
    static let shared = DataManager()
    
    private init() {
        
    }
    
    var mainContext: NSManagedObjectContext {
        return persistentContainer.viewContext
    }
    
    var memoList = [Memo]()

    func fetchMemo() {
        let request: NSFetchRequest<Memo> = Memo.fetchRequest()
        
        let sortByDateDesc = NSSortDescriptor(key: "insertDate", ascending: false)
        request.sortDescriptors = [sortByDateDesc]
        
        do {
            memoList = try mainContext.fetch(request)
        } catch {
            print(error)
        }
    }
    
    func addNewMemo(_ memo: String?) {
        
        let newMemo = Memo(context: mainContext)
        newMemo.content = memo
        newMemo.insertDate = Date()

        memoList.insert(newMemo, at: 0)
        
        saveContext()
    }
    

    func deleteMemo(_ memo: Memo?) {
        if let memo = memo {
            mainContext.delete(memo)
            saveContext()
        }
    }

    func saveImage(data: Data) {
        let memo = Memo(context: mainContext)
        memo.image = data
        saveContext()

    }

ComposeViewController:我保存从照片库中挑选的图像

if let memoImage = imageView.image?.pngData() {
                DataManager.shared.saveImage(data: memoImage)
                DataManager.shared.saveContext()

                print("Saved Image") 
            }

            DataManager.shared.addNewMemo(memo)
            NotificationCenter.default.post(name: ComposeViewController.newMemoDidInsert, object: nil)
        }

DetailViewController:我想在哪里获取图像

DispatchQueue.main.async {
            if let memoImage = self.memo.image {
                self.imageView.image = UIImage(data: memoImage as Data)
            } else {
                print("No image fetch")
            }
        }

在此处输入图像描述

在此处输入图像描述

标签: swiftcore-dataxcode12

解决方案


您正在保存 2 个备忘录对象,一个没有图像,一个只有图像。我会删除saveImage函数并将图像(数据)作为参数添加到addNewMemo函数中,然后调整调用代码。

func addNewMemo(_ memo: String?, image: Data?) {        
    let newMemo = Memo(context: mainContext)
    newMemo.content = memo
    newMemo.insertDate = Date()
    if let data = image {
        newMemo.image = data
    }

    memoList.insert(newMemo, at: 0)
    
    saveContext()
}

调用代码

let memoImage = imageView.image?.pngData()
DataManager.shared.addNewMemo(memo, image: memoImage)

NotificationCenter.default.post(name: ComposeViewController.newMemoDidInsert, object: nil)
    

推荐阅读