Coredata 图片转换 swiftUI
Coredata Image conversion swiftUI
我正在构建一个简单的 CoreData 应用程序。在某一时刻,用户能够以 NSData 格式上传和存储带有 CoreData 的图像。保存 managedobjectcontext 的工作方式如下:
let item = Item(context: self.managedObjectContext)
item.theImage = selectedImageFromPicker.pngData() as NSData?
//saving the MOC
现在,当我尝试检索图像时,我遇到了一系列问题。
struct Box {
var id: Int
let title: String
let image: NSData?
}
struct BoxView: View {
let box: Box
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var item: Item
var body: some View {
VStack {
Image(uiImage: UIImage(data: box.image) as! Data)
.resizable()
.frame(width: 120, height: 120, alignment: .center)
.aspectRatio(contentMode: .fill)
}
}
}
我很确定用包含数据的 UIImage 显示 Image() 在这里是错误的,但我不知道如何将数据转换为 Image() 方法显示的格式。
不幸的是 Xcode 也不会帮助处理它的错误消息,而是将其归咎于 VStack。
也许其他人以前遇到过这种情况并且可以提供帮助,因为我没有在网上找到有关此特定问题的任何信息。
据我了解,您需要如下内容(为了简洁起见,我删除了与图像无关的代码)
var body: some View {
VStack {
image
}
}
var image: some View {
if let nsData = box.image, let uiImage = UIImage(data: nsData as Data) {
return AnyView(Image(uiImage: uiImage)
.resizable()
.frame(width: 120, height: 120, alignment: .center)
.aspectRatio(contentMode: .fill))
}
return AnyView(EmptyView())
}
这是我的做法。它适用于列表。
我把这个函数放在结构视图中...
func getImageFromData(show: MyShow) -> UIImage {
//this is just a placeholder
var finalImage = (UIImage(systemName: "xmark"))
if let data = show.image {
if let image = UIImage(data: data as Data) {
finalImage = image
}
}
return finalImage!
}
然后我把它放在正文视图中...
var body: some View {
NavigationView {
List {
ForEach(myShows, id: \.self) { (show: MyShow) in
VStack {
Image(uiImage: self.getImageFromData(show: show))
}
}
}
}
我正在构建一个简单的 CoreData 应用程序。在某一时刻,用户能够以 NSData 格式上传和存储带有 CoreData 的图像。保存 managedobjectcontext 的工作方式如下:
let item = Item(context: self.managedObjectContext)
item.theImage = selectedImageFromPicker.pngData() as NSData?
//saving the MOC
现在,当我尝试检索图像时,我遇到了一系列问题。
struct Box {
var id: Int
let title: String
let image: NSData?
}
struct BoxView: View {
let box: Box
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var item: Item
var body: some View {
VStack {
Image(uiImage: UIImage(data: box.image) as! Data)
.resizable()
.frame(width: 120, height: 120, alignment: .center)
.aspectRatio(contentMode: .fill)
}
}
}
我很确定用包含数据的 UIImage 显示 Image() 在这里是错误的,但我不知道如何将数据转换为 Image() 方法显示的格式。 不幸的是 Xcode 也不会帮助处理它的错误消息,而是将其归咎于 VStack。
也许其他人以前遇到过这种情况并且可以提供帮助,因为我没有在网上找到有关此特定问题的任何信息。
据我了解,您需要如下内容(为了简洁起见,我删除了与图像无关的代码)
var body: some View {
VStack {
image
}
}
var image: some View {
if let nsData = box.image, let uiImage = UIImage(data: nsData as Data) {
return AnyView(Image(uiImage: uiImage)
.resizable()
.frame(width: 120, height: 120, alignment: .center)
.aspectRatio(contentMode: .fill))
}
return AnyView(EmptyView())
}
这是我的做法。它适用于列表。
我把这个函数放在结构视图中...
func getImageFromData(show: MyShow) -> UIImage {
//this is just a placeholder
var finalImage = (UIImage(systemName: "xmark"))
if let data = show.image {
if let image = UIImage(data: data as Data) {
finalImage = image
}
}
return finalImage!
}
然后我把它放在正文视图中...
var body: some View {
NavigationView {
List {
ForEach(myShows, id: \.self) { (show: MyShow) in
VStack {
Image(uiImage: self.getImageFromData(show: show))
}
}
}
}