核心数据删除对象

时间:2013-06-29 16:27:21

标签: ios core-data

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

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

我有两个课程,为了讨论,我们称他们为CarTire。我不知道约定是什么,所以我想出了自己的,即将C_添加到关联Core Data对象的名称的开头,以存储与这些对象关联的对象。所以我还有两个额外的课程C_CarC_Tire。每辆车可以有多个轮胎,因此Car有一个tires属性,NSSet Tire *。此外,Car有一个名为CarCD的{​​{1}}类型的属性,而C_Car *有一个名为Tire的{​​{1}}类型的属性,因此每个对象都可以跟踪其关联的核心数据对象(CD用于核心数据)。

Xcode构建了添加或删除对象的便捷方法。其中包括将轮胎添加到汽车的方法。我这样使用它:

TireCD

此外,还有一种方便的方法可以从汽车上取下轮胎C_Tire *。我认为在我的视图控制器中的每个地方都有:

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. 中删除该对象。第二行从应用程序中使用的汽车对象中删除对象。

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

另外,如果你想对命名惯例发表评论,现在是我采用传统方法的时候了。

1 个答案:

答案 0 :(得分:1)

(这是上述评论的摘要以及一些其他评论。)

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

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

  • 在类名中使用下划线(我认为)是不寻常的。托管对象类的更好的类名可能是CDCarCDTire,或者,如果您按照建议使用 三个字母前缀,XYZCarXYZTire其中XYZ是您选择的前缀。
  • 我会将CarViewTireView用于UIView子类。