如何在核心数据中保存图像的引用(图像 URL 或路径)并在以后需要时加载?

Posted

技术标签:

【中文标题】如何在核心数据中保存图像的引用(图像 URL 或路径)并在以后需要时加载?【英文标题】:How to saving reference (image URL or path) of images in core data and load it later when needed? 【发布时间】:2013-12-01 03:48:30 【问题描述】:

我正在开发一个应用程序,我需要从设备相机拍摄照片和视频并将其显示在集合视图中。该应用程序将图像和视频保存在相机胶卷中,因此我需要将这些资产的引用保存在 coredata 中,以便应用程序稍后加载它。

我正在使用常规功能,例如,

writeImageToSavedPhotosAlbum:[cameraMedia CGImage]
                             metadata:metaData
                             completionBlock:^(NSURL *assetURL,NSError *error)

writeVideoAtPathToSavedPhotosAlbum:mediaUrl
                           completionBlock:^(NSURL *assetURL, NSError *error)

我很容易获得assetURL。但是我不确定我是否可以将assetURL直接保存在coredata中,如果不能,我应该怎么做才能保存图像引用并稍后从保存引用中有效地重新加载它?

为了澄清我的问题,我知道如何使用核心数据。我的问题是我应该在核心数据中保存什么作为图像/视频参考?例如,assetURL 是 NSURL 对象,可能我无法将其保存为核心数据中的字符串。那么,有什么方法可以转换 URL 并将其保存到 coredata.xml 中。以后如何从 coredata 中保存的参考中加载图像?

【问题讨论】:

您有任何理由或业务需要将它们保存在相机胶卷中吗? 你肯定可以将它们保存在核心数据中,你知道如何创建核心数据模型并设置核心数据堆栈吗?如果不是从查看一些简单核心数据应用程序的教程开始。 是的,我知道如何使用核心数据。我的问题是我应该将什么保存到核心数据中,以便稍后加载图像?就像我假设我不能直接保存 NSURL 一样。我应该从 URL 保存路径,我可以从路径加载图像吗?什么是最好的选择?有示例代码吗? @null,是的,这是客户的要求。 【参考方案1】:

获取资源 URL 的方法如下:

[yourAssetsLibrary  writeImageToSavedPhotosAlbum:[cameraMedia CGImage]
                                        metadata:metaData
                                 completionBlock:^(NSURL *assetURL, NSError *error)     
                                      NSLog(@"%@", assetURL);// this what you need to save    
                              ];

保存在核心数据中:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity];
YOURENTITY *yourEntity = (YOURENTITY *) [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
[yourEntity setValue:assetURL forKey:@"imagePath"];// save it here

NSError *error;
if (![context save:&error]) 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();

【讨论】:

谢谢!核心数据中的“imagePath”类型是什么?字符串? 我应该如何从 NSURL 获取图像数据?有什么建议吗?

以上是关于如何在核心数据中保存图像的引用(图像 URL 或路径)并在以后需要时加载?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式保存来自 URL 的图像?

如何使用 SQLite 文件预加载 Core Data,该文件引用使用“外部存储”保存的图像?

如何在不保存原始图像的情况下保存图像 URL 的裁剪图像? (在 Rails 中使用 Paperclip 或其他插件)

在 iOS 中使用 URL 将 Imageview 图像保存在 SQL 数据库中

swift核心数据:保存相机中的图像

Swift - 保存到核心数据