Ios 核心数据删除对象

Ios 核心数据删除对象,ios,core-data,Ios,Core Data,我正在将核心数据添加到我的iPad应用程序中。我的一般过程是通过将代码放入app委托来测试代码。当我对正确解析代码感到满意时,我会将其移动到应用程序中其他位置的适当方法。到目前为止,这在添加对象方面是有效的。但我在删除对象时遇到了问题。通过选择并删除它们,我可以从应用程序委托中很好地删除它们,现在我在应用程序启动时删除它们,只是为了保持数据库干净,直到核心数据代码正常工作 我的工作流程到此为止。我现在遇到的问题是从适当的位置删除一个对象。让我们看看我是否能简单描述一下我的设置 我有两门课,为了便

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

我的工作流程到此为止。我现在遇到的问题是从适当的位置删除一个对象。让我们看看我是否能简单描述一下我的设置

我有两门课,为了便于讨论,我们把它们叫做
Car
Tire
。我不知道约定是什么,因此我提出了自己的约定,即在相关核心数据对象的名称开头添加
C
,以存储与这些对象相关联的对象。因此,我有两个额外的类,
C_Car
C_Tire
。每辆车可以有几个轮胎,因此
有一个属性
轮胎
,它是
轮胎*
NSSet
。此外,
Car
具有一个名为
CarCD
C_Car*
类型的属性,
Tire
具有一个名为
TireCD
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*)值。我发现在我的视图控制器中的任何地方,我都有:

[tireObject removeFromSuperview];//tireObject is a (Tire *) object.
我只想将其改为:

[carObject removeTireObject:tireObject.tireCD];
[tireObject removeFromSuperview];
第一行应该从核心数据对象的
NSSet
中删除对象。第二行从应用程序中使用的汽车对象中删除该对象

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

另外,如果您想对命名约定发表评论,现在是我采纳任何常规的时候了。

(这是以上评论的总结,再加上一些附加评论。)

  • [car removeTireObject:tire]
    只从车上卸下轮胎,不删除轮胎对象。要删除对象,请调用
    [上下文删除对象:tire]
  • 如果从C_轮胎到C_汽车的关系的“删除规则”设置为“无效”,则删除轮胎将自动将其从相关汽车中删除
  • 只有在保存上下文时,核心数据更改才会写入磁盘,只有在保存上下文时,您才会这样做 请参阅SQLite调试输出
有关命名约定,请参见“使用Objective-C编程”中的。一些评论:

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

使用po查询CarCD对象,我看到删除操作正在实际发生。我想我的错误是我没有删除TireCD对象,只是从CarCD对象中删除了它的引用。我不明白为什么您有两组类(Car/Tire和C_Car/C_Tire)。每个实体一个托管对象子类就足够了。不是所有汽车和轮胎的属性都需要保存到核心数据中。C_Care和C_Tire仅包含需要保存的属性。应用程序中需要汽车和轮胎的其他属性,但不需要核心数据。我希望这是有道理的。一个是NSMagagedObject。另一个不是。汽车/轮胎是UIView的?轮胎是汽车的副视图?