为什么删除相关对象时Core Data会恢复已删除的对象?

时间:2012-05-12 02:56:31

标签: objective-c ios core-data ios5

假设我在Core Data中有一个House实体,它与许多GraphicalAssets相关联,这些是House的图片。

我想彻底清除所有房屋和房屋本身的所有图形资产。对于两个方向,关系的删除行为是Nullify。似乎删除东西的正确顺序是首先吹走图形资产,然后是房屋。这是发生的事情:

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?

所以,似乎,因为房屋曾经指向图形资产(当资产被删除时应该已经无效的关系),当我删除房屋时,它会神奇地复活已删除的对象。为什么会这样?在删除任何一个对象之前,我甚至尝试在两个方向上明确地清除房屋和它们的图形资产之间的关系,并且它仍然以这种方式运行。

1 个答案:

答案 0 :(得分:2)

HouseGraphic的多对多关系的删除规则应该是级联的 - 这意味着删除House会将删除级联到所有Graphic个对象< / p>