使用核心数据中的级联删除关系对象

时间:2013-12-11 19:16:23

标签: ios objective-c core-data cascading

我希望使用Core数据执行一些简单的删除,但只需要对此请求一些建议。

我有一个包含交易,名称,事件和日期实体的模型。交易具有指向其他每个实体的链接。

在应用程序中,当用户向文本字段添加信息时,会将其保存到4选项卡表视图控制器中。

第一个选项卡使用NSFetchedResultController和事务实体上的fetchRequest。第二个选项卡使用名称实体,第三个选项卡使用事件,第四个选项卡使用日期实体。

如果我从“交易”选项卡中删除一个条目,它只删除那个有意义的交易。

我想要的是能够从“名称”选项卡中删除某个人,或者从“事件”选项卡中删除一个事件,并将其级联到应用程序的模型中。因此,如果Bob有多个事务,删除他的事务选项卡将删除该一个事务。

如果我从名称标签中删除了BOB,那么它应该从每个日期和交易中与他分开的每个事件中删除他。

同样适用于事件和日期。

编辑:更新以包含数据模型

注意:年份实体是实验性的,目前尚未使用 enter image description here 我该如何做这样的事情?

由于

2 个答案:

答案 0 :(得分:8)

如果您为Person的“交易”关系设置“删除规则” 到Transaction到“Cascade”,然后删除一个人将自动删除 所有相关交易。

答案 1 :(得分:0)

首先,我看不到将日期抽象为实体的智慧。也许你可以开导我。在我看来,日期属于交易。在日期选项卡上,您仍然需要获取事务,但会对它们进行分组和排序。

我想你知道如何让你的Person-to-Transactions关系级联。这将删除与人关联的所有交易。这同样适用于Event。

然而,在另一个方向上的层叠更成问题。你必须以某种方式检查它是否是多对多关系的 last 成员,如果是,则只删除它。一种方法是覆盖setter。在生成的NSManagedObject子类中,您将找到自动生成的setter,包括用于在集合中添加或删除对象的setter(即多对多关系)。

-(void)removeTransactionsObject:(Transaction *)value {
    [super removeTransactionsObject:value];
    if (!self.transactions.count) {
       [self.managedObjectContext deleteObject:self];
    }
}