无法从coredata获取数据

时间:2015-03-31 09:41:42

标签: objective-c core-data ios5.1

我从照片库中获取图像并将其保存到核心数据,然后将其显示到图像视图中。这是正确的工作。但是当我再次运行项目时,图像没有显示在我的图像视图中。

这是从照片库中获取图像的代码

   -(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.
}

4 个答案:

答案 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();
}