2009-12-06 65 views
1

我使用自定义界面制作Cocoa应用程序。到目前为止,我已经实现了使用CALayer进行渲染的一个应用程序版本,这对于CALayers的层次结构以及处理鼠标事件的[hitTest:]函数非常有用。在这个早期版本中,应用程序的模型是我的自定义类。Core Data + Core Animation/CALayer在一起吗?

但是,随着程序的增长,我感受到使用Core Data作为模型的愿望,不仅仅是为了简化绑定/撤销管理,还希望尝试新技术。

我到目前为止方法:

在核心数据:创建实体,与属性XPOS,yPos,宽度,高度 ...等。

然后,创建一个BlockView用来:CALayer的类图,它采用的方法,例如self.position.x = [自valueForKey:@ “XPOS”]从模型获取的值。

在这种情况下,每BlockView用来对象必须也保持XPOS,这是不好的本地副本。

你们有没有更好的建议?

编辑: 这个程序是一个信息可视化工具。所以块的位置,尺寸很重要,应该保留以备后续分析。

回答

1

是否正在编辑和保存这些“块”的位置和大小,以完成您的应用存在的任务?

如果没有,该信息可能不应该在您的模型中。

+0

是的。这些块的位置是为了以后分析而保存的。 – ivanTheTerrible 2009-12-06 07:05:31

0

那么在你的实现中,每个BlockView都有它自己的x?

为什么不让BlockView类保持对块的引用?

该视图可以用它用来设置它的位置的块初始化。

这可以让视图类和模型保持良好的分离。

1

使用核心数据来存储图形对象的实际运行时间位置不是一个好主意。这样做直接将数据模型与视图混合。这将使应用难以调试和维护,并且会使其组件重复使用的可用性大大降低。

相反,当创建视图对象时,应该有核心数据向视图控制器提供任何预先存在的位置数据,然后在处理完成时保存数据。

理想情况下,无论使用什么样的持久性存储方法,持久存储方法都应该工作,无论用于显示数据的视图类型如何,视图都应该可以工作。例如,对于使用Web视图的视图,使用Core Animation甚至纯文本输出的视图,您应该能够使用相同的数据模型。