2015-03-31 179 views
1

我從照片庫中獲取圖像並將其保存到核心數據,然後將其顯示到圖像視圖。這是正確的工作。但是當我再次運行項目時,圖像沒有顯示在我的圖像視圖中。無法從coredata獲取數據

這是從照片庫

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

您可以通過設置一個實體修改coredata背景,但你不保存修改。正因如此,當您再次運行您的項目時,它不會被保存。

要修復它,您必須通過簡單地使用save方法在修改後保存您的NSManagedObjectContext上下文。

所以,在你的fetchData方法的末尾,儘量讓:

[context save:nil]; 

(您可以在參數傳遞一個NSError保存過程中出現錯誤。)

+0

哦,我在做非常愚蠢的錯誤做了這一切之後的修改。現在完成了。謝謝 – 2015-03-31 10:34:41

5

首先,你應該保存圖像路徑(而不是uiimage)到Core Data,然後從Core Data獲取路徑並通過此路徑將圖像加載到imageView。

並使用魔法記錄(https://github.com/magicalpanda/MagicalRecord)來管理核心數據,你完全沒有問題。

0

爲了節省:

[newChannelToCoreData setValue:UIImagePNGRepresentation(_currentChannelImage) forKey:@"image"]; 

要提取:

_currentChannelImage = [UIImage imageWithData:[lastChannel valueForKey:@"image"]]; 
0

上coredata

NSError *error = nil; 
if (![context save:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}