我正在使用Core Data(适用于iPhone)设计我的第一个项目,我遇到了一些可能与我的设计方法有关的问题。
我正在做一个允许用户创建订单的应用程序(比方说餐馆)。 我正在使用图形设计器来建模我的持久性对象(即OrdeMO)。我将MO添加到每个名称的ead中以指示其托管对象。 我使用XCode自动创建托管对象类。
我创建了一些“DAO”类,允许您在托管上下文中搜索或创建新对象。
现在我的问题。
我想创建一个OrderMO对象来存储用户正在创建的顺序,但我不希望它成为上下文的一部分,直到用户实际放置它。 我尝试使用[OrderMO alloc]创建对象,但我得到的对象是“不完整的”,当我尝试设置其任何属性时,我得到一个错误。
我假设问题是我需要在上下文中创建订单才能使用它。是这样吗?
我考虑过各种选择:
在上下文中创建对象,如果用户丢弃订单,则用户回滚。问题是用户可能在进程中保存其他上下文对象(比如他的prefs),所以这不起作用。有没有办法在“单独的事务中”创建对象?
创建一个包装对象,该对象将保存与MO相同的数据,然后仅在用户下订单时创建MO。这样做的缺点是我必须维持一个新的课程。
在MO中创建属性,例如“已放置”,并用于在上下文中过滤我的搜索。这个问题是我最终会在域中使用“垃圾”对象(即未放置的订单),我将不时做一些清理......
我还有其他选择吗?
任何建议都表示赞赏。
谢谢(阅读这篇长篇文章!) Gonso
答案 0 :(得分:0)
如果用户决定不下订单,您应该在托管对象上下文中创建OrderMO对象,然后delete。
如果在删除对象之前保存了上下文,则在下次保存时将从持久性存储中删除“trash”对象(如果未保存上下文,则“trash”对象将永远不会保存到持久性存储中) 。
确定订单是否已下达的标志不必像您在选项3中建议的那样存在于OrderMO对象中。它可能位于跟踪正在编辑的订单的视图控制器中。而且,再次,您将没有“垃圾”对象,因为它们将被删除。