0

Core Data に House エンティティがあり、それが House の写真である多くの GraphicalAssets に関連付けられているとします。

すべての家のすべてのグラフィック アセット、および家自体を完全に吹き飛ばしたいと考えています。リレーションシップの削除動作は、両方向で 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?

つまり、以前は家がグラフィック アセット (アセットが削除されたときに無効になるはずだった関係) を指していたため、家を削除すると削除されたオブジェクトが魔法のように復活したようです。なぜこうなった?いずれかのオブジェクトを削除する前に、家とそのグラフィック アセットとの関係を双方向で明示的に無効にすることさえ試みましたが、それでもこのように動作します。

4

1 に答える 1

2

Houseto からtoへの対多関係の削除ルールはGraphicカスケードする必要があります。これは、 a を削除するHouseと、削除がすべてのGraphicオブジェクトにカスケードされることを意味します

于 2012-05-12T02:58:13.167 に答える