Objective c 当我删除相关对象时,为什么核心数据会恢复已删除的对象?

Objective c 当我删除相关对象时,为什么核心数据会恢复已删除的对象?,objective-c,ios,core-data,ios5,Objective C,Ios,Core Data,Ios5,假设我在核心数据中有一个房屋实体,它与许多图形集相关联,这些图形集是房屋的图片 我想彻底清除所有房屋的所有图形资产,以及房屋本身。对于两个方向,关系上的删除行为都为null。似乎删除东西的正确顺序是先删除图形资产,然后删除房屋。下面是发生的情况: NSFetchRequest* fetchAllGraphicalAssets = [ [ NSFetchRequest alloc ] initWithEntityName:@"GraphicalAsset" ]; NSArray* allGraph

假设我在核心数据中有一个房屋实体,它与许多图形集相关联,这些图形集是房屋的图片

我想彻底清除所有房屋的所有图形资产,以及房屋本身。对于两个方向,关系上的删除行为都为null。似乎删除东西的正确顺序是先删除图形资产,然后删除房屋。下面是发生的情况:

NSFetchRequest* fetchAllGraphicalAssets = [ [ NSFetchRequest alloc ] initWithEntityName:@"GraphicalAsset" ];
NSArray* allGraphicalAssets = [ self.managedObjectContext executeFetchRequest:fetchAllGraphicalAssets error:nil ];
for( GraphicalAsset* asset in allGraphicalAssets )
        [ self.managedObjectContext deleteObject:asset ];
[ self.managedObjectContext processPendingChanges ];

// At this point, if I execute fetchAllGraphicalAssets again, the count is 0. Perfect.

NSFetchRequest* housesRequest = [ NSFetchRequest fetchRequestWithEntityName:@"House"];
NSArray* existingHouses = [self.managedObjectContext executeFetchRequest: housesRequest error:nil]; 
    for( House* house in existingHouses )
        [ self.managedObjectContext deleteObject: house ];
[ self.managedObjectContext processPendingChanges ];

// Now, if I execute fetchAllGraphicalAssets again, the count is > 0. What is going on?

所以,看起来像是,因为houses过去常常指向图形资产(当资产被删除时,这种关系本应无效),所以当我删除houses时,它神奇地恢复了被删除的对象。为什么会这样?在删除任何一个对象之前,我甚至尝试在两个方向上明确地取消房屋和它们的图形资产之间的关系,但它仍然以这种方式运行

House
Graphic
的多对多关系的删除规则应该是级联-这意味着删除
House
将级联删除到所有
Graphic
对象

如果我保留代码,我必须将现有关系设置为nil,则更改为级联无效。这是有道理的。但如果它没有任何效果也是有意义的,因为在我开始删除房屋时存在0个图形资产,所以应该没有任何可级联的内容。尽管如此,我删除了额外的语句,我确实得到了不同的行为。但是,当我最终保存管理对象上下文时,它将永远固定我的处理器,并且永远不会完成。这与我尝试在图形资产之前切换和删除房屋时得到的行为相同。我将接受这一点,因为它确实阻止了我描述的行为的发生。尽管如此,这并没有解决我的问题(根本无法节省),我最终不得不撕毁关系,做一些不同的事情来完成我需要的。我认为这段关系最初的定义有些不对劲。