假设我在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?
所以,似乎,因为房屋曾经指向图形资产(当资产被删除时应该已经无效的关系),当我删除房屋时,它会神奇地复活已删除的对象。为什么会这样?在删除任何一个对象之前,我甚至尝试在两个方向上明确地清除房屋和它们的图形资产之间的关系,并且它仍然以这种方式运行。
答案 0 :(得分:2)
从House
到Graphic
的多对多关系的删除规则应该是级联的 - 这意味着删除House
会将删除级联到所有Graphic
个对象< / p>