2012-05-12 82 views
0

假設我在覈心數據中有一個房子實體,並且它與許多圖形資產相關聯,這些圖形資產是房屋的圖片。當我刪除相關對象時,爲什麼Core Data會重新生成已刪除的對象?

我想完全吹走所有房屋和房屋本身的所有圖形資產。對於這兩個方向的關係的刪除行爲是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? 

因此,它似乎是,因爲房子用來指向圖形資產(應該當資產被刪除已經無效的關係),它奇蹟般地復活了已刪除的對象時,我刪除房子。這是爲什麼發生?我甚至在刪除任何一個對象之前,都試圖在兩個方向上明確地清除房屋與其圖形資產之間的關係,並且它仍然以這種方式行事。

回答

2

HouseGraphic的多對多關係刪除規則應該是級聯 - 這意味着刪除House將級聯刪除所有Graphic對象

+0

如果我把代碼,我不得不設置到現有的關係無,更改爲級聯不起作用。這是有道理的。但是,由於在我開始刪除房屋時存在0個圖形資產,所以它也沒有任何影響,所以應該沒有任何東西可以級聯。儘管如此,我刪除了額外的陳述,而且我得到了不同的行爲。但是,當我最終保存管理對象上下文時,它會永久鎖定我的處理器並永遠不會完成。當我嘗試在圖形資產之前切換並刪除房屋時,這與我得到的行爲相同。 –

+1

我會接受這一點,因爲它確實可以防止我描述的行爲發生。雖然,它並沒有解決我的問題(它根本不能保存),我最終不得不撕開關係,做一些不同的事情來完成我所需要的。我認爲,一開始就定義了這種關係的方式是一件棘手的事情。 –

相關問題