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];
4

5 回答 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];

改变格式

于 2013-02-25T16:31:18.030 回答
2

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

解决方案:

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

于 2012-08-09T08:16:00.447 回答
1

如果没有必要,请不要更改分辨率..

NSData * imageData = UIImageJPEGRepresentation(imageSave, 0.0);

//并更改以下行

[event setValue:imageData forKey:@"pictureData"];

使用示例代码查看核心数据教程中的存储和检索图像。

希望对你有帮助..

于 2012-04-25T07:46:45.640 回答
0

您必须将托管对象的图片数据值设置NSData 对象(在您的情况下为imageData),而不是imageSave对象,它是UIImage

于 2012-04-25T07:44:30.140 回答
0

您可以使用这种 hacky 方式存储图像,核心数据不支持图像,但您可以将图像转换为字符串。

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

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

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

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

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

于 2021-03-15T00:57:35.003 回答