通用核心数据“可附加”父类

时间:2010-11-27 21:48:20

标签: iphone cocoa-touch core-data

我正在开发一个拥有许多不同类型实体的Core Data应用程序。有Property的实体,Apartment的实体,Tenant的实体,以及其他一些我希望能够使用iPhone的相机/照片库附加图片的实体到。

我之前在较小的项目中使用过相机,但这次我想做的是编写一些通用的“可附加”代码并拥有每个实体(Property,{{1 }}和Apartment)继承自Tenant类,以便拥有开箱即用的所有必要代码。

我认为这样可以避免代码重复,类似于the excellent Ruby/Rails Paperclip plugin

在我重新发明轮子之前,我想知道是否有这样的东西已经存在。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不希望将控制摄像头或UI的代码放在托管对象子类中。这将打破Modal-View-Controller设计模式并使应用程序纠结。托管对象子类应仅关注建模数据。

但是,没有理由不能让托管对象子类管理Core Data的持久存储之外的数据文件。

在这种情况下,您必须选择使用Core Data存储图像。您只需将UIImage对象直接存储到任何实体的可转换属性中即可。但是,使持久存储变得庞大并且可能严重减慢提取速度。更好的方法是将图像存储为单独的文件,其路径名存储在字符串属性中。

我建议创建一个Image实体并自定义其类来管理文件。使用transient属性表示实际的UIImage对象。然后为Property,Apartment和Tenant创建一个与Image实体有关系的抽象父类。物业,公寓和租户都将继承image关系。

这样,要为任何属性,公寓或租户设置图像,您只需使用:

UIImage *displayImage=aProperty.image.imageObject; //object.relationship.attribute

关系另一端的Image对象将加载并返回UIImage。

您需要以这种方式处理它,因为需要符合键值。这样,只要您设置或删除图像,Core Data就会更新对象图以反映更改。

相关问题