我从照片库中获取图像并将其保存到核心数据,然后将其显示到图像视图中。这是正确的工作。但是当我再次运行项目时,图像没有显示在我的图像视图中。
这是从照片库中获取图像的代码
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissModalViewControllerAnimated:YES];
UIImage *img= [info objectForKey:@"UIImagePickerControllerOriginalImage"];
NSManagedObjectContext *context=[self managedObjectContext];
NSManagedObject *newContact=[[NSManagedObject alloc] initWithEntity:[NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:context] insertIntoManagedObjectContext:context];
//newContact = [NSEntityDescription insertNewObjectForEntityForName:@"Images" inManagedObjectContext:context];
NSData *data=UIImageJPEGRepresentation(img,0.0);
[newContact setValue:data forKey:@"image"];
[self fetchData];
}
这是fetchData()方法的代码。
-(void)fetchData
{
NSManagedObjectContext *context=[self managedObjectContext];
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Contacts"
inManagedObjectContext:context]];
NSError * error = nil;
NSArray * objects = [context executeFetchRequest:request error:&error];
if ([objects count] > 0) {
NSManagedObject *managedObject = objects[0];
data1 = [managedObject valueForKey:@"image"];
image2 = [[UIImage alloc]initWithData:data1];
_imageView.image=image2;
}
}
这是我的viewDidLoad()
- (void)viewDidLoad
{
[super viewDidLoad];
[self fetchData];
// Do any additional setup after loading the view.
}
答案 0 :(得分:5)
首先,您应该将图像路径(不是uiimage)保存到Core Data,然后从Core Data获取路径并通过此路径将图像加载到imageView。
使用魔法记录(https://github.com/magicalpanda/MagicalRecord)来管理核心数据,你完全没有问题。
答案 1 :(得分:0)
您可以通过设置实体来修改您的coredata上下文,但不保存修改。因此,再次运行项目时不会保存它。
要解决此问题,您必须在修改后使用NSManagedObjectContext
方法保存save
上下文。
因此,在fetchData
方法结束时,请尝试制作:
[context save:nil];
(您可以在参数中传递NSError以在保存期间获取错误。)
答案 2 :(得分:0)
保存:
[newChannelToCoreData setValue:UIImagePNGRepresentation(_currentChannelImage) forKey:@"image"];
获取:
_currentChannelImage = [UIImage imageWithData:[lastChannel valueForKey:@"image"]];
答案 3 :(得分:0)
在对coredata进行所有修改后执行此操作
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}