0

我正在将核心数据添加到我的 iPad 应用程序中。我的一般程序是通过将代码放入应用程序委托来测试代码。当我对正确解析代码感到满意时,我会将其移至应用程序中其他地方的适当方法。到目前为止,这对添加对象有效。但我在删除对象时遇到问题。我可以通过选择它们并删除它们来从应用程序委托中很好地删除它们,现在我在应用程序启动时将它们全部删除,只是为了保持数据库清洁,直到我有核心数据代码工作。

我的工作流程已经足够了。我现在遇到的问题是从适当的位置删除一个对象。让我们看看我能否简要描述一下我的设置。

我有两个班级,为了讨论起见,让我们给他们Car打电话Tire。我不知道约定是什么,所以我想出了自己的,即C_在关联的 Core Data 对象的名称开头添加与这些对象关联的对象。所以我有两个额外的课程,C_CarC_Tire. 每辆车可以有几个轮胎,所以Car有一个属性tires,它是一个NSSetof Tire *。另外Car还有一个称为CarCDtype的属性C_Car *,并Tire有一个称为TireCDtype的属性,C_Tire *以便每个对象都可以跟踪其关联的核心数据对象(CD 用于核心数据)。

Xcode 构建了方便的方法来添加或删除对象。其中包括为汽车添加轮胎的方法。我因此使用它:

tire.tireCD = tireCD; //tire is an object of type Tire *, and tireCD is an object of type C_Tire *.
[self.carCD addTireObject:tireCD];//self.carCD is a property in my view controller of type CarCD *, and tireCD is a local object of type TireCD *.

此外,还有一种方便的方法可以从汽车上卸下轮胎- (void)removeTireObject:(C_Tire *)value;。我发现在我的视图控制器中的任何地方都有:

[tireObject removeFromSuperview];//tireObject is a (Tire *) object.

我只是将其更改为:

[carObject removeTireObject:tireObject.tireCD];
[tireObject removeFromSuperview];

第一行应该从NSSet核心数据对象中删除对象。第二行从应用程序中使用的汽车对象中移除该对象。

问题是,执行此代码时,我在调试器窗口中看不到任何 SQL 生成。我错过了什么吗?

此外,如果您想对命名约定发表评论,现在是我采用传统命名的时候了。

4

1 回答 1

1

(这是上述评论的摘要加上一些额外的评论。)

  • [car removeTireObject:tire]只是从汽车上移除轮胎,它不会删除轮胎对象。要删除对象,请调用[context deleteObject:tire]
  • 如果从 C_Tire 到 C_Car 的关系的“删除规则”设置为“Nullify”,则删除轮胎将自动将其从相关汽车中删除。
  • 核心数据更改只有在保存上下文时才会写入磁盘,只有这样你才能看到 SQLite 调试输出。

有关命名约定,请参阅“使用 Objective-C 编程”中的“约定”。一些备注:

  • 在类名中使用下划线(我认为)是不寻常的。托管对象类的更好的类名可能是CDCarCDTire或者,如果您遵循使用三个字母前缀的建议,那么您XYZCar选择的前缀XYZTire在哪里XYZ
  • 我会使用CarView,TireView作为UIView子类。
于 2013-06-29T18:21:27.147 回答