将图片保存到核心数据

6

我是一个与核心数据相关的新手。有没有人可以帮助我提供适当的步骤/教程,展示如何将图像保存到核心数据并检索它们。我已经能够存储字符串数据,但当尝试保存图像时,我的应用程序会崩溃。

保存图片的步骤:

DataEvent *event = (DataEvent *)[NSEntityDescription insertNewObjectForEntityForName:@"DataEvent"
                                                          inManagedObjectContext:managedObjectContext];
NSURL *url2 = [NSURL URLWithString:@"xxxxxxxxxxxxxxx SOME URL xxxxxxxxxxxx"];

NSData *data = [[NSData alloc] initWithContentsOfURL:url2];
imageSave=[[UIImage alloc]initWithData:data];
NSData * imageData = UIImageJPEGRepresentation(imageSave, 100.0);    
[event setValue:self.imageSave forKey:@"pictureData"];

获取数据:

 DataEvent *event = (DataEvent *)[eventsArray objectAtIndex:indexPath.row];
 UIImage *image = [UIImage imageWithData:[event valueForKey:@"pictureData"]];
 UIImageView *imageViewMainBackGround = [[UIImageView alloc] 
 CGRect rect3=CGRectMake(0,2,100.0,100.0); 
 imageViewMainBackGround.frame = rect3;
 [cell.contentView addSubview:imageViewMainBackGround];
 [imageViewMainBackGround release];

你的模型文件中,"pictureData" 是什么数据类型? - Dinesh Raja
“使用的模型打开商店与用于创建商店的模型不兼容”,您在哪里遇到了这个错误? - Dinesh Raja
尝试这样做,而不是使用此行代码 [event setValue:self.imageSave forKey:@"pictureData"];: event.pictureData = imageData; - Dinesh Raja
UIImageJPEGRepresentation的第二个参数需要一个在0到1范围内的数字。您使用了一个超出范围的数字100.0。您可能想要使用1.0。 - Victor Engel
5个回答

9

保存:

NSData *imageData = UIImagePNGRepresentation(myUIImage);

[newManagedObject setValue:imageData forKey:@"imageKey"];

获取图片的方法:

NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"imageKey"]];
[[newCustomer yourImageView] setImage:image];

格式已更改


2

错误: 原因 =“用于打开存储的模型与用于创建存储的模型不兼容”

解决方案:

从模拟器中删除构建项目并从“产品”选项卡中清除,现在运行该项目。


1

嗨,在执行此操作后,我遇到了错误:原因是“用于打开存储的模型与用于创建存储的模型不兼容”。 - PUNEET GARG
在哪里保存或检索? - Nitin

0

您需要将托管对象的pictureData值设置为NSData对象(在您的情况下是imageData),而不是UIImage对象imageSave


0

你可以使用这种 hacky 的方式存储图片,因为 CoreData 不支持直接存储图片,但你可以将图片转换成字符串来存储。

self.selectedImage?.jpegData(compressionQuality: 1)?.base64EncodedString()

使用此代码,您可以将图像转换为字符串。

要检索图像,您应该获取核心数据实例,并在到达图像实例后使用以下代码将其转换回图像

if let decodedData = Data(base64Encoded: entity.img as! String, options: .ignoreUnknownCharacters) 
{let image = UIImage(data: decodedData)}

这是一种非常简单的存储图像的方式,但如果您的应用程序中有太多的图像,就不应该将它们存储在核心数据中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接