代码之家  ›  专栏  ›  技术社区  ›  Neal L

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

  •  0
  • Neal L  · 技术社区  · 14 年前

    我正在开发一个核心数据应用程序,它有很多不同类型的实体。有一个实体 Property ,的实体 Apartment ,的实体 Tenant ,以及其他一些我希望能够使用iPhone的相机/照片库附加图像的功能。

    我以前在较小的项目中使用过相机,但这次我想做的是编写一些通用的“可附加”代码,并使每个实体( 财产 , 公寓 ,和 租户 )继承自 Attachable 类以使所有必需的代码都开箱即用。

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

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

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  1
  •   TechZen    14 年前

    您不希望将控制相机或UI的代码放在托管对象子类中。这将打破模式视图控制器的设计模式,使应用程序陷入混乱。托管对象子类只应与建模数据有关。

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

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

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

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

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

    这个 图像 关系另一端的对象将加载并返回UIImage。

    您需要这样处理它,因为需要遵从键值。这样,无论何时设置或删除图像,核心数据都会更新对象图以反映更改。