核心数据与提取属性的跨存储关系

时间:2010-06-10 13:30:49

标签: iphone core-data properties

在我的核心数据模型中(在iPhone SDK 3.1上),我有几个与图像的同一实例相关联的实体。图像本身也存储为托管对象。为了节省磁盘空间,我正在尝试为图像创建1个db文件,为所有其他对象创建另一个db文件。

阅读Apple的文档和谷歌搜索数天我得出以下结论: - 创建1个包含所有实体描述的数据模型 - 使用1个持久性商店协调员

  • 使用配置将图像实体存储在与其他实体不同的文件(sqlite)中(请参阅here

  • 并且,由于Core Data不支持从一个持久性存储中的实例到另一个持久性存储中的实例的关系,请使用“Fetched Properties”创建弱的单向关系

使用配置非常简单:使用数据建模器为实体分配配置,并声明在向协调器添加持久存储时要使用的配置。在我的情况下,我将商店添加到协调员。

但问题在于:在提取时,让我们说一个商店的“用户”对象,如何使用提取的属性加载与该用户关联的图像(并将它们分配给用户对象)?

我是否必须在用户对象中为'images'编写自定义访问器方法?如何(以及在​​何处)为fetched属性指定谓词?

我确信必须有一个教程或示例来解释这一点(因为这显然是Apple建议的方式)。但到目前为止还没有运气。

有什么想法吗?

希望我们可以开始讨论这个话题。我确信还有其他(更聪明)的方法来解决这个问题......

2 个答案:

答案 0 :(得分:1)

我不确定您的磁盘空间断言是否正确。如果没有测试您的应用程序的证据,我会坚持使用更简单的一个商店解决方案。那说......

您需要在User类中存储图像的一些标识属性。我会使用transformable属性来存储管理器对象ID。您在数据建模器中添加了一个fetched属性,并在那里指定谓词。

答案 1 :(得分:1)

在这种情况下,使用单独的商店不会使任何“更好”。不建议在Core Data中存储大型二进制数据。您应该将其存储在磁盘上并使用对文件系统的引用。

请参阅此处的BLOB部分。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdPerformance.html