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?
因此,它似乎是,因爲房子用來指向圖形資產(應該當資產被刪除已經無效的關係),它奇蹟般地復活了已刪除的對象時,我刪除房子。這是爲什麼發生?我甚至在刪除任何一個對象之前,都試圖在兩個方向上明確地清除房屋與其圖形資產之間的關係,並且它仍然以這種方式行事。
如果我把代碼,我不得不設置到現有的關係無,更改爲級聯不起作用。這是有道理的。但是,由於在我開始刪除房屋時存在0個圖形資產,所以它也沒有任何影響,所以應該沒有任何東西可以級聯。儘管如此,我刪除了額外的陳述,而且我得到了不同的行爲。但是,當我最終保存管理對象上下文時,它會永久鎖定我的處理器並永遠不會完成。當我嘗試在圖形資產之前切換並刪除房屋時,這與我得到的行爲相同。 –
我會接受這一點,因爲它確實可以防止我描述的行爲發生。雖然,它並沒有解決我的問題(它根本不能保存),我最終不得不撕開關係,做一些不同的事情來完成我所需要的。我認爲,一開始就定義了這種關係的方式是一件棘手的事情。 –