我正在使用 Core Data 的神奇记录。
在我的应用程序中,我只有一个具有一些字符串属性的实体。现在,我想为这个实体添加一个图像,但我不知道如何使用魔法记录来做到这一点。我搜索但没有在网上找到任何东西。在我的应用程序中,所有数据都是由用户插入的,图像也是由相机或照片库插入的。
如何使用 Magical Record 和 Core Data 存储图像?
我正在使用 Core Data 的神奇记录。
在我的应用程序中,我只有一个具有一些字符串属性的实体。现在,我想为这个实体添加一个图像,但我不知道如何使用魔法记录来做到这一点。我搜索但没有在网上找到任何东西。在我的应用程序中,所有数据都是由用户插入的,图像也是由相机或照片库插入的。
如何使用 Magical Record 和 Core Data 存储图像?
只需将图像存储在应用程序的文档文件夹中,并将带有文件 url 的字符串保存在核心数据实体中。
我找到了答案:
保存:
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;
}
您在上面尝试的操作可以轻松完成。我能给你的最好建议是创建一个新的示例项目,只是为了从CoreData
数据库中保存和检索图像。这样你就可以确切地知道这个过程是如何工作的。如果您尝试将此功能嵌入到您当前的项目中,您可能会忘记在哪里发生了什么。
这是一个非常简单的示例,我希望您自己在 .h 文件中导入代表等。
首先启动UIImagePicker
via按钮
-(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
可以帮助您的链接:
希望对您有所帮助,祝您好运!
一句忠告。在核心数据中将图像存储为transformable
(aka NSImage
) 类型很容易,但即使是从 50k 到 200kb 平均为 100k 的少量(超过 20 个),也会导致应用程序整体性能下降。考虑到一个控制器通常绑定到另一个控制器,即使通过关系链接这些文件也很慢。
将本地路径名存储为NSString
指向 Documents 文件夹的上述方法对于整体体验来说更好。
话虽如此,创建一个缩略图(大约 150x150)可能有利于创建一次并将其存储为 a transient
transformable
NSImage
,而不是加载 biggy 并进行多次即时调整大小。在包含 50 多个缩略图的表格中上下滚动可以轻松观察到该性能。