我是与核心数据相关的新手。任何人都可以帮我提供正确的步骤/教程,展示如何将图像保存到核心数据及其回溯。我能够存储字符串数据,但我的应用程序在尝试保存图像时崩溃。 保存:
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];
答案 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)}
这是一种非常简单的图像存储方式,但如果您的应用中有太多图像,则不应将它们存储在核心数据中