在iPhone上的Core Data中存储大型(例如图像/电影)文件

时间:2009-07-23 00:19:29

标签: iphone core-data

查看Apple iPhone Core Data Recipes示例应用程序,它们将图像文件存储在核心数据对象中,这通常不是我认为明智的。现在我也将在3GS上捕捉视频故事。问题是:在iPhone上的Core Data中存储图像,然后是电影是否明智?

此外还有加载到内存中。显然,食谱中使用的设计(即,将图像存储在单独的模型中)允许Core Data执行“错误”(听起来像是延迟加载),但我不确定这是否真的如此。

看这里:http://developer.apple.com/iPhone/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdPerformance.html#//apple_ref/doc/uid/TP40003468-SW5似乎通用的Cocoa建议是使用单独的文件....

2 个答案:

答案 0 :(得分:10)

这取决于。 CoreData能够存储具有良好性能的大blob。最大的问题是:

  1. 如果这些blob是可能并非总是出现故障的实体的属性,则需要小心确保无论何时使用该实体,都要告知CD在属性中不要出错。您可以通过隔离自己实体中的blob来解决这个问题,在通过关系访问它之前不会出现故障。
  2. 您的持久存储是一个整体文件,这意味着如果其中的任何内容发生更改,则需要在备份期间复制整个文件。这通常会增加手机在与iTunes同步时备份所需的时间,因为您更改了一些元数据,现在它必须复制每张图像。

    第一个问题通常不是什么大问题,你只需要小心。如果数据是有效的只读,则第二个不是问题,但如果您的持久存储中有几百兆字节的数据,则可能是非常糟糕的用户体验。

答案 1 :(得分:0)

请参阅我的回答:

Can I access the files used for external binary storage in Core Data?

您现在可以使用“允许外部存储”选项将大型文件存储在Core Data中。唯一的问题是不再能够通过路径访问实际文件了。我提出了一个“创造性”的解决方案(无论是最好的做法都是猜测),但它允许您使用Core Data来管理文件,同时仍然能够通过路径访问REAL文件。