使用魔法记录将图像保存到核心数据

时间:2013-06-13 08:52:19

标签: image core-data magicalrecord

我正在使用Core Data的神奇记录。

在我的应用程序中,我只有一个具有一些字符串属性的实体。现在,我想为这个实体添加一个图像,但我不知道如何使用魔法记录来做到这一点。我搜索但没有在网上找到任何东西。在我的应用程序中,所有数据都由用户插入,图像,相机或照片库也是如此。

如何使用Magical Record和Core Data存储图像?

4 个答案:

答案 0 :(得分:2)

只需将图像存储在应用程序的文档文件夹中,并将文件URL保存在核心数据实体中。

答案 1 :(得分:0)

您在上面尝试的内容可以轻松完成。我可以给你的最佳建议是创建一个新的示例项目,以保存和检索CoreData数据库中的图像。这样你就可以确切了解这个过程的工作原理。如果您尝试在当前项目中嵌入此功能,则可能无法跟踪发生在何处的情况。

这是一个非常快速的示例,我希望您自己导入.h文件中的代理等。

首先启动UIImagePicker通过按钮

-(IBAction)pickImage:(id)sender
{
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        [self presentModalViewController:imagePicker animated:YES];
}

选择图像后,您可以使用其中一种委托方法

在按钮上显示图像
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 

    self.imageButton.imageView.image = selectedImage; 

要将其保存到CoreData,请将您的UIImage类型分配到数据库中属性的 Transformable 类型,然后保存managedObjectContext

链接可以帮助您:

UIImagePicker Class Reference

Magical Record Docs

CoreData Recipes Sample Project

希望这有帮助,祝你好运!

答案 2 :(得分:0)

我找到了答案:

保存:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", self.fieldName.text];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];
UIImage *image = self.showSelectedImage.image; // imageView is my image from camera
NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
[data1 writeToFile:pngFilePath atomically:NO];

加载:

 -(void) loadImageFromPathInsideView
{
    // [self loadImageFromPathInsideView];
    Ricetta* contact =[[DataManager sharedClass]dammiTuttaLaRicetta:self.indice];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString*nomeImmagine = [[NSString alloc] initWithFormat:@"%@", contact.nome2];
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [NSString stringWithFormat:@"%@/%@.png",documentsDirectory, nomeImmagine];;
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    self.image.image = image;
}

答案 3 :(得分:0)

提出建议。将图像存储为核心数据中的transformable(又名NSImage)类型很容易,但即使数量较少(超过20),范围从50k到200kb,平均为100k,也会导致应用程序整体性能下降。考虑到一个控制器经常绑定到另一个控制器,即使通过关系链接这些文件也很慢。

将本地路径名称存储为指向Documents文件夹的NSString的上述方法更适合整体体验。

话虽如此,创建一个缩略图(大约150x150)可能有利于创建一次并将其存储为transient transformable NSImage,而不是加载biggy和做即时调整大小。可以在包含50多个缩略图图像的表格中轻松地上下滚动表现。