在我的Core Data模型中(在iPhone SDK 3.1上),我有几个与图像的同一实例相关联的实体 . 图像本身也存储为托管对象 . 为了节省磁盘空间,我正在尝试为映像创建1个db文件,为所有其他对象创建另一个db文件 .
阅读Apple的文档和Google搜索数天我得出以下结论: - 创建1个包含所有实体描述的数据模型 - 使用1个持久性存储协调器
-
使用配置将图像实体存储在与其他实体不同的文件(sqlite)中(请参阅here)
-
并且,由于Core Data不支持从一个持久性存储中的实例到另一个持久性存储中的实例的关系,请使用“Fetched Properties”来创建弱的单向关系
使用配置非常简单:使用数据建模器为实体分配配置,并声明在向协调器添加持久存储时使用的配置 . 就我而言,我将商店添加到协调员 .
但问题在于:在获取时,让我们说一个商店中的“用户”对象,如何使用获取的属性加载与该用户关联的图像(并将它们分配给用户对象)?
我是否必须在用户对象中为“图像”编写自定义存取方法?如何(以及在何处)为fetched属性指定谓词?
我确信必须有一个教程或示例来解释这一点(因为这显然是Apple建议的方式) . 但到目前为止没有运气 .
任何的想法?
希望我们可以开始讨论这个主题 . 我确信还有其他(更聪明的)方法来解决这个问题......
2 回答
在这种情况下,使用单独的商店不会使任何“更好” . 不建议在Core Data中存储大型二进制数据 . 您应该将其存储在磁盘上并使用对文件系统的引用 .
请参阅此处的BLOB部分 .
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdPerformance.html
我不确定你关于磁盘空间的断言是否正确 . 如果没有测试您的应用程序的证据,我会坚持使用更简单的一个商店解决方案 . 那说......
您需要在User类中存储图像的一些标识属性 . 我会使用transformable属性来存储管理器对象ID . 您在数据建模器中添加了一个fetched属性,并在那里指定谓词 .