0

如果我使用 Core Data 中的“Transformable”属性来存储图像,我的理解是 Core Data 可能会也可能不会根据文件大小将其存储在持久存储中。通常我不会关心它存储图像的位置,但是对于这个应用程序,我需要将它与一个预种子数据库一起发送,以防在应用程序首次启动时找不到互联网连接。所以我基本上想拍摄数据库的快照(包括图像)并在第一次启动应用程序时加载它。

我的问题是,如果 Core Data 出于某种原因决定不使用持久存储,那么当我加载预种子数据库时,图像还会被加载吗?还是会因为图像存储在用户在自己的设备上安装时不再存在的某个神奇区域而损坏?

4

2 回答 2

2

使属性可转换与使用外部存储无关。存储在外部记录文件中选项可用于二进制属性和可转换文件,但两者都不是必需的。

如果您有一个可转换的属性使用外部记录文件,那么您是正确的,Core Data 根据其自己的未记录逻辑(但可能通过检查大小)决定是否实际使用外部文件。这些外部文件保存在数据存储所在目录的子目录中。如果您的数据存储名为Foo.sqlite,则在找到该文件的同一目录中是一个名为.Foo_SUPPORT/_EXTERNAL_DATA/. 您可以通过以下几种方式处理此问题:

  • 复制整个目录Foo.sqlite,包括点文件。这是首选,因为外部引用目录的路径没有记录,并且(理论上)可能会改变。您将获得外部引用,但您不需要对目录名称进行硬编码。
  • 直接复制目录,因为你知道它在哪里。由于上述原因,这可能不是一个好主意。

或者,如果您愿意,请不要使用外部参考。它们不是任何属性所必需的,如果您愿意,可以将所有数据放在一个整体 SQLite 文件中。

于 2013-05-21T21:08:42.240 回答
0

您可以只告诉核心数据为您的图像使用外部存储,而不必弄清楚何时使用它并一直使用它。您可以在属性的核心数据检查器上找到分配属性以使用外部存储的选项。

于 2013-05-21T19:27:50.520 回答