我正在使用Core Data的神奇记录。
在我的应用程序中,我只有一个具有一些字符串属性的实体。现在,我想为这个实体添加一个图像,但我不知道如何使用魔法记录来做到这一点。我搜索但没有在网上找到任何东西。在我的应用程序中,所有数据都由用户插入,图像,相机或照片库也是如此。
如何使用Magical Record和Core Data存储图像?
答案 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
链接可以帮助您:
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多个缩略图图像的表格中轻松地上下滚动表现。