我正在开发一个应用程序,可以让用户录制视频和照片。现在我想知道存储它们的最佳方式是什么?
第一个想法当然是将其保存在用户的照片库中,就像他从相机应用程序记录照片一样,并使用对文件的引用。现在存在的问题是用户可以从“照片”应用程序访问和删除文件,而我的应用程序可能仍然需要这些文件。我不认为我可以阻止用户删除照片,但是我如何处理我的应用程序将遇到的不一致问题?
另一种方法是自己管理存储。我的应用程序已经使用核心数据,因此我可以使用NSValueTransformer
to an NSData
对象并将其作为 BLOB 存储在 Core Data 中。然后还有一些关于性能的问题。我知道基于 SQLite 的 Core Data 可以完美处理几 GB 大小的数据库,但加载大数据对象无论如何都需要一些时间。明显的优点是用户不会让我的应用程序不一致,但是性能损失可以接受吗?最重要的是:如果我使用UIImagePickerController
要捕获照片和视频,无论如何它都会将其保存在库中。要将其保存在核心数据中,我必须从那里拍摄照片,将其转换为NSData
对象,保存它并再次从库中删除它。这对我来说似乎不是正确的方法。另外,UIKit 为我提供了一个函数来获取NSData
照片中的对象通过UIImageJPEGRepresentation()
,但是好像没有这样的转换视频的功能。
总而言之,由于所有这些未解答的问题,我想使用第一种方法。但不一致的问题让我困惑。处理它的最佳做法是什么?
为了照片:
UIImagePickerController 将在内存中返回一个 UIImage,因此您无需执行任何操作,无需将其从用户的照片库中取出并将其保存在核心数据中...
对于视频:
您可以使用以下方式取出数据NSData *data = [NSData dataWithContentsOfFile:]
or [NSData dataWithContentsOfUrl:]
获取视频的 NSData 对象。轻松获取videoUrl
所以,我只是先纠正你的一些错误假设。
您不需要将其直接保存到 CoreData。您可以将其保存到应用程序的文档文件夹中,然后用户将无法删除它。此外,保存到应用程序的文档文件夹并仅保存 CoreData 的链接也将使您免于处理大数据对象。
问题可能是您需要处理文件存储。
我认为这里没有最佳实践。
保存在用户的照片库中将帮助用户更轻松地查看他们的照片和视频,而无需访问您的应用程序
保存在 CoreData 中可能对您来说更容易,有时可能会更快
保存到文件存储中可能会帮助您在加载视频时避免处理一些二进制问题,因为 Apple MPMoviePlayerController 可能会帮助您
对于我来说,因为我不使用太多 SQLite 和 Core Data,所以我选择存储到文件系统中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)