0

我正在使用 Core Data(用于 iPhone)设计我的第一个项目,并且我遇到了一些可能与我的设计方法相关的问题。

我正在做一个允许用户创建订单的应用程序(比如说餐厅)。我正在使用图形设计器来模拟我的持久性对象(即 OrdeMO)。我将 MO 添加到每个名称的开头以表明它是一个托管对象。我使用 XCode 自动创建托管对象类。

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

现在到我的问题。

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

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

我考虑了各种选择:

  1. 如果用户放弃订单,则在上下文中创建对象和用户回滚。问题是用户可能会在此过程中保存其他上下文对象(如他的首选项),因此这不起作用。有没有办法在“单独的事务中”创建对象?

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

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

我还有其他选择吗?

任何建议表示赞赏。

感谢(阅读这篇长文!)Gonso

4

1 回答 1

0

您应该在托管对象上下文中创建 OrderMO 对象,然后在用户决定不下订单时将其删除。
如果在删除对象之前保存了上下文,则“垃圾”对象将在下次保存时从持久存储中删除(如果未保存上下文,“垃圾”对象将永远不会保存到持久存储) .
如您在选项 3 中建议的那样,确定订单是否下达的标志不必存在于 OrderMO 对象中。它可能位于跟踪正在编辑的订单的视图控制器中。而且,同样,您不会有“垃圾”对象,因为它们将被删除。

于 2009-11-03T05:18:03.630 回答