代码之家  ›  专栏  ›  技术社区  ›  Philipp Bolliger

具有获取属性的核心数据交叉存储关系

  •  5
  • Philipp Bolliger  · 技术社区  · 16 年前

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

    读了几天苹果的文档和谷歌搜索,我得出了以下结论: -创建一个包含所有实体描述的数据模型 -使用1个永久存储协调器

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

    • 而且,由于核心数据不支持从一个持久性存储中的实例到另一个持久性存储中的实例的关系,请使用“获取的属性”创建弱的单向关系

    使用配置非常简单:使用数据建模器将配置分配给实体,并在向协调器添加持久存储时声明要使用的配置。在我的例子中,我向协调器添加了stores。

    但问题是:当从一个存储中提取“User”对象时,如何使用提取的属性加载与该用户相关联的图像(并将其分配给User对象)?

    是否必须为用户对象中的“images”编写自定义访问器方法?如何(以及在何处)为获取的属性指定谓词?

    我确信一定有一个教程或例子来解释这一点(因为这显然是苹果建议的做法)。但到目前为止还没有运气。

    知道吗?

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   logancautrell    16 年前

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

    请参阅此处的BLOBs部分。

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

        2
  •  1
  •   Stephane Rolland    13 年前

    我不确定你关于磁盘空间的断言是否正确。没有测试证据 你的 应用程序,我会坚持更简单,一个商店,解决方案。也就是说。。。

    您需要在用户类中存储图像的一些标识属性。我将使用一个可转换的属性来存储管理器对象id。在数据建模器中添加获取的属性,并在其中指定谓词。