将UIImage转换为NSData并使用核心数据保存

Bad*_*PPZ 18 core-data objective-c nsdata ios

UIImageView的图像是通过设置的UIImagePicker

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    [picker dismissViewControllerAnimated:YES completion:nil];
    self.gImage.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
Run Code Online (Sandbox Code Playgroud)

我"尝试"将此图像转换为NSData核心数据并将其保存:

NSData *imageData = UIImagePNGRepresentation(self.gImage.image);
NSString *savedData = [[NSString alloc]initWithData:imageData encoding:NSUTF8StringEncoding];

//am is a pointer to my entities class. imageData is just a NSString attribute
am.imageData = savedData;

NSError *error;
if (![self.managedObjectContext save:&error]) {
    //Handle Error
} else {
    [self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试将图像加载到一个单独的文件中:

self.cell.gImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:self.myEntity.imageData]]];
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不起作用.任何帮助是极大的赞赏!

Nit*_*hel 58

您可以将UIImage转换为NSData,如下所示:

如果PNG图像

UIImage *image = [UIImage imageNamed:@"imageName.png"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)];
Run Code Online (Sandbox Code Playgroud)

如果是JPG图片

UIImage *image = [UIImage imageNamed:@"imageName.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
Run Code Online (Sandbox Code Playgroud)

您可以将它存储在CoreData中(这是一个可能有用的解决方案):

[newManagedObject setValue:imageData forKey:@"image"];
Run Code Online (Sandbox Code Playgroud)

您可以像这样从CoreData加载数据:

NSManagedObject *selectedObject = [[self yourFetchCOntroller] objectAtIndexPath:indexPath];
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]];

// Set the image to your image view  
yourimageView.image = image;
Run Code Online (Sandbox Code Playgroud)


Ric*_*tes 10

对于它的刚刚:

UIImageNSData

imageData = UIImagePNGRepresentation(image)
Run Code Online (Sandbox Code Playgroud)