2009-09-25 86 views
0

我正在设计我的第一个项目,使用核心数据(用于iPhone)和我有一些问题可能与我的设计方法有关。核心数据:设计问题。对象包装还是不对?

我正在做一个应用程序,允许用户创建一个订单(让我们说一个餐馆)。 我正在使用图形设计器来建模我的持久对象(即OrdeMO)。我将MO添加到每个名称的首字母以指示其托管对象。 我使用XCode自动创建托管对象类。

我创建了一些“DAO”类,允许您在托管上下文中搜索或创建新对象。

现在我的问题。

我想创建一个OrderMO对象来存储用户正在创建的订单,但我不希望它成为上下文的一部分,直到用户实际放置它。 我试图用[OrderMO alloc]创建对象,但我得到的对象是“不完整”,当我尝试设置它的任何属性时,我得到一个错误。

我假设问题是我需要在上下文中创建订单才能使用它。是这样吗?

我已经考虑了各种选择:

  1. 创建上下文对象和用户回滚如果用户丢弃的顺序。问题在于用户可能在过程中保存其他上下文对象(如他的首选项),因此这不起作用。有没有办法在各种类型的“独立事务中”创建对象?

  2. 创建一个包装对象,它将保存与MO相同的数据,然后只在用户下订单时创建MO。这个缺点是我必须保持一个新班级。

  3. 在MO中创建一个属性,例如“放置”,并用于在上下文中过滤我的搜索。这一个问题是,我将结束在域“垃圾”对象(即未放置的订单),我将不得不时不时地做一些清理...

难道我有什么其他选择?

任何建议表示赞赏。

感谢(阅读这篇很长的帖子!) Gonso

回答

0

您应该创建在管理对象方面的OrderMO对象,如果用户决定不来下订单,然后delete它。
如果在删除对象之前保存上下文,则在下次保存时将从持久存储中删除“垃圾”对象(如果未保存上下文,“垃圾”对象将永远不会保存到持久性存储商店)。
如您在选项3中所建议的那样,用于确定订单是否被放置的标记不必位于OrderMO对象中。它可以位于正在编辑的订单(一个或多个)的视图控制器中。而且,再次,您不会有“垃圾”对象,因为它们将被删除。