2

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

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

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

4

4 回答 4

2

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

于 2013-06-13T12:42:08.967 回答
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;
}
于 2013-06-27T11:40:53.277 回答
0

您在上面尝试的操作可以轻松完成。我能给你的最好建议是创建一个新的示例项目,只是为了从CoreData数据库中保存和检索图像。这样你就可以确切地知道这个过程是如何工作的。如果您尝试将此功能嵌入到您当前的项目中,您可能会忘记在哪里发生了什么。

这是一个非常简单的示例,我希望您自己在 .h 文件中导入代表等。

首先启动UIImagePickervia按钮

-(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 类参考

魔法唱片文件

CoreData 食谱示例项目

希望对您有所帮助,祝您好运!

于 2013-06-14T10:14:42.527 回答
0

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

将本地路径名存储为NSString指向 Documents 文件夹的上述方法对于整体体验来说更好。

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

于 2013-06-27T22:54:00.230 回答