gpt4 book ai didi

ios - 快速从核心数据中获取特定的 uiimage

转载 作者:行者123 更新时间:2023-11-28 15:43:36 27 4
gpt4 key购买 nike

我对 swift 和核心数据还很陌生。所以如果这个逻辑没有意义,请告诉我。

我正在尝试将用户的图像保存到核心数据并能够删除选定的图像。我有实体“媒体”,属性“照片”类型“二进制数据”

这里我把UIImage转成NSData

let data = UIImagePNGRepresentation(addedImage!) as NSData?

并保存。

let newPhoto = NSEntityDescription.insertNewObject(forEntityName: "Media", into: context)
newPhoto.setValue(imageData, forKey: "photo")

在这里,我尝试使用谓词从核心数据中检索一张选定的图像

func deleteImage(imageData: NSData) {

let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Media")
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "photo =%@", imageData)

do {
let results = try context.fetch(request)
...

我收到此错误消息。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OS_dispatch_data _bytesPtrForStore]: unrecognized selector sent to instance

从实体“媒体”保存和获取所有图像工作正常。我只是无法得到具体的。

有什么想法/建议吗?谢谢。

最佳答案

像这样保存图像,为属性启用外部存储,可以没问题。但是这里发生了一些非常不寻常的事情。

通常的方法是让图像成为具有其他信息的实体的一部分,而不是作为实体的主要值。例如,表示一个人并具有姓名、地​​址等和图片的实体类型。在实体中存储只是一张图片有点奇怪。与更简单的东西相比,使用 Core Data 并没有给你带来太多好处。如果不出意外,我猜你在实体中有带照片的身份证件、头衔或其他一些数据。

第二件事与此有关——尝试使用基于二进制数据属性的谓词来获取数据是极其不寻常的。我想它可能 有效,但前提是您可以确保谓词值始终与持久存储中的值相同——二进制 blob 中的任何一位都没有更改。这可能是真的,但我不会依赖 UIKit 不做一些使它微妙不同的事情。我从未见过那个特定的错误消息,但我对它不起作用并不感到惊讶。

最后,根据获取请求删除对象也是不寻常的(尽管不像上面那样奇怪)。您之前会获取这些对象以获取图像。为什么要再次获取同一个对象只是为了删除它?删除您已经获取的那个。

更可靠的方法是至少在实体中包含一个唯一 ID,它可以是整数或 UUID 或任何适合您的东西。使用 photo 属性获取此实体并显示图像。当你想删除一个时,从你的获取中取出托管对象并告诉上下文删除那个。或者如果出于某种原因需要获取,请在谓词中使用唯一 ID 而不是二进制数据。

关于ios - 快速从核心数据中获取特定的 uiimage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403441/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com