外部记录文件中iOS存储的核心数据

kin*_*apo 22 core-data ios

第一次在这里问一个问题,如果我没有提供足够的信息,请放轻松.基本上我的iOS应用程序的一部分允许用户拍摄将存储​​在Core Data存储中的图片.该属性是Transformable类型,我创建了一个NSManagedObject子类,我只是用它来将其image属性设置为用户提供的新图像.

我知道在Core Data中存储大文件是一个坏主意,这就是为什么当我看到Core Data实体中的image属性下的"Store in External Record File"选项时,我很兴奋.然而,我的应用程序性能说不然,在iPhone 5上花费几秒钟只加载一些图像(我知道听起来不是很多时间,但考虑到iPhone 5有多强大,旧设备可能需要更长的时间相同的数据).

我环顾四周,有人说Store in External Record File选项仅适用于OS X环境,即使它在iOS应用程序中可用.但是,我也在Apple的"iOS 5中的新功能"文档中看到了这一点(它是核心数据下的最后一项,接近结尾):

托管对象支持两个重要的新功能:有序关系和属性值的外部存储.如果指定托管对象属性的值可以存储为外部记录,则Core Data会根据每个值来决定是将数据直接保存在数据库中还是将URL存储到它管理的单独文件中为了你.

所以我的问题是,谁是对的?苹果公司在为iOS应用程序提供此选项时犯了错误,除非您使用的是Mac,否则它实际上什么也没做,或者它实际上是做了什么而且我没有以正确的方式配置它,或者是它做它应该做的事情,而且表现还不错?

我已经看到一些指南解释如何将大文件(如图像)存储为文件,并将URL保存在Core Data存储中,但由于这实际上是这个新选项正在做的,或者可能应该这样做,我不确定遵循这些指南是否会有所帮助.

如果之前有人问我,我真的很抱歉.通常情况下,我可以自己解决这个问题,但Core Data对我来说是全新的,我仍然不确定我是如何通过初始设置吱吱作响的.感谢您提供的任何帮助!

ter*_*ina 8

谁对吗?

NSAttributeDescription该类的iOS docset 确实提到了这些allowsExternalBinaryDataStoragesetAllowsExternalBinaryDataStorage:方法,因此Apple几乎没有错误.

你做错了什么或者慢了吗?

你之前这么说

该属性是可转换类型

但核心数据有一种Binary data类型.也许只有这一个与外部存储功能相关联.

如果不是这样,我们这里没有足够的信息:

  • 你存了多少张照片?
  • 它们的尺寸是多少? 
  • 你自动获取所有图像吗?

此外,Apple文档指出:

核心数据启发式决定每个值...

  • 您是使用迁移还是从头开始?

您可以查看应用程序的沙箱,看看您的图片是否真的保存在CoreData之外.

希望这可以帮助.

  • 谢谢,你得到了数据类型.我最初使用Transformable类型,给它一个简单的UIImage,但当我切换到二进制数据类型,给它一个图像的NSData对象,如你所建议的那样,它在属性类型下显示了"允许外部存储"选项在检查员,这是我所追求的设置.我还通过取消检查并记录加载和保存图像所花费的时间与检查时间相比测试了这一点,并且在检查时速度更快.谢谢你的帮助!:) (5认同)