在Core Data中存储照片和视频?

Bjö*_*lek 4 iphone photo core-data video-capture objective-c

我正在开发一个应用程序,让用户录制视频和照片.现在我想知道存储它们的最佳方法是什么?

第一个想法当然是将其保存在用户的照片库中,就好像他已经从相机应用程序中记录了照片,并使用对文件的引用.现在存在用户可以访问和删除照片应用程序中的文件的问题,我的应用程序可能仍然需要这些文件.我不认为我可以阻止用户删除照片,但我如何处理我的应用程序将遭受的不一致?
另一种方法是自己照顾存储.我的应用程序已经使用了核心数据,这样我就可以使用媒体文件转换NSValueTransformerNSData对象并将其存储在核心数据BLOB.然后还有一些关于性能的问题.我知道基于SQLite的核心数据可以完美地处理大小为几GB的数据库,但是加载大型数据对象需要花费一些时间.显而易见的优点是用户不会使我的应用程序不一致,但性能损失是否可以接受?最重要的是:如果我用a UIImagePickerController来拍摄照片和视频,那么无论如何它都会将它保存在图书馆中.要将其保存在Core Data中,我必须从那里拍摄照片,将其转换为NSData对象,保存并再次从库中删除.这对我来说似乎不是正确的方法.此外,UIKit为我提供了NSData从照片中获取对象的功能UIImageJPEGRepresentation(),但似乎没有这样的功能来转换视频.

总而言之,由于所有未解决的问题,我想使用第一种方法.但是不一致问题困扰着我.处理它的最佳做法是什么?

vod*_*ang 9

对于照片:

UIImagePickerController将在内存中返回一个UIImage,因此您不必执行任何操作,不会将其从用户的照片库中删除并将其保存在核心数据中...

对于视频:您可以使用NSData *data = [NSData dataWithContentsOfFile:][NSData dataWithContentsOfUrl:]获取数据,以获取视频的NSData对象.您可以轻松获得videoUrl

所以,我刚刚纠正了一些错误的假设.

您无需将其直接保存到CoreData.您可以将其保存到应用程序的文档文件夹中,然后用户将无法删除它.此外,保存到应用程序的文档文件夹并仅保存到CoreData的链接也将使您的灵魂无法处理大数据对象.

问题可能是您需要处理文件存储.

我不认为这里有最好的做法.

保存在用户的照片库中可以帮助用户更轻松地查看照片和视频,而无需访问您的应用

保存在CoreData中对您来说可能更容易,并且可能在某些时候更快

保存到文件存储可能有助于您在加载视频时不处理某些二进制问题,因为Apple MPMoviePlayerController可能会帮助您

对我来说,因为我没有使用太多SQLite和Core Data,所以我选择存储到文件系统中