2017-12-11 3 views
1

My CoreData 모델에 동일한 추상 상위 엔티티 "자동차"가있는 두 개의 하위 엔티티 "CarA"와 "CarB"가 있습니다. NSBatchDeleteRequest가 모든 하위 엔티티를 삭제합니다.

나는뿐만 아니라 모든 카라 객체 삭제에 deleteObjects("CarA") 결과를 실행

func deleteObjects(entityName: String) { 
     let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName) 
     let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) 
     do { 
      try context.execute(deleteRequest) 
     } catch let error as NSError { 
      print(error) 
     } 
    } 

를 사용하는 모든 카라 개체를 삭제하기 위해 노력하고있어,하지만 모든 탄수화물뿐만 아니라 객체.

답변

2

이것은 나에게 버그처럼 보입니다. 당신이 SQLDebug을 사용하는 경우, 당신은 전체 부모 개체가 삭제되는 콘솔 출력에서 ​​볼 수 있습니다

CoreData: sql: BEGIN EXCLUSIVE 
CoreData: sql: DELETE FROM ZABSTRACT 
CoreData: sql: COMMIT 

(내 부모 개체가 "추상"라는). 그러나 당신이 프리디 케이트를 추가하면, CoreData는 근본적인 페치를 한정하여 올바른 하위 엔티티로 제한한다는 것을 기억합니다.

fetchRequest.predicate = NSPredicate(value:true) 

그 결과 콘솔 출력됩니다 :

CoreData: sql: BEGIN EXCLUSIVE 
CoreData: sql: DELETE FROM ZABSTRACT WHERE Z_PK IN (SELECT t0.Z_PK FROM ZABSTRACT t0 WHERE t0.Z_ENT = ?) 
CoreData: sql: COMMIT 

그것은 단지 WHERE 절을 떠나, 심지어 CoreData 보인다 진정한 조건을 최적화 그래서 해결 방법은 항상 true입니다 술어를 추가하는 것입니다 올바른 엔티티로 삭제를 제한하십시오.

+0

감사합니다. 해결되었습니다. – Paul

관련 문제