将图像保存到核心数据

时间:2012-04-25 07:33:14

标签: objective-c ios cocoa-touch core-data uiimage

我是与核心数据相关的新手。任何人都可以帮我提供正确的步骤/教程,展示如何将图像保存到核心数据及其回溯。我能够存储字符串数据,但我的应用程序在尝试保存图像时崩溃。 保存:

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

5 个答案:

答案 0 :(得分: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];

更改格式

答案 1 :(得分:2)

  

error:reason =“用于打开商店的模型与用于创建商店的模型不兼容”

<强>溶液

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

答案 2 :(得分:1)

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

NSData * imageData = UIImageJPEGRepresentation(imageSave, 0.0);

//并更改以下行

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

See the store and Retrieve image from core data tutorial with sample code.

希望,这会对你有帮助..

答案 3 :(得分:0)

您必须将受管对象的 pictureData 值设置为NSData对象(在您的情况下为 imageData ),而不是 imageSave 对象,这是 UIImage

答案 4 :(得分:0)

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

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

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

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

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

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