2009-08-11 5 views
2

NSDeleteRequest 클래스는 존재하지 않는다고 생각하지만 그렇게하고 싶습니다.NSPredicate를 사용하여 코어 데이터에서 NSDeleteRequest와 NSFetchRequest를 비교하는 방법이 있습니까?

나는 자 NSPredicate를하고 발행 NSFetchRequest를 사용할 수 있습니다

선택 * foo는에서 X = Y

어떻게 발급 할 수있는 :

foo는에서 삭제 여기서 x = y를

?

1000의 행을 삭제하는 유일한 방법은이를 가져 와서 반복하고 각 NSManagedObject에서 delete를 호출하는 것입니다. 그게 맞습니까? 왜 내가 단지 하나의 SQL 문을 삭제할 수 없습니까?

+1

배열을 반복하여 한 번에 하나씩 삭제해야하지만 일괄 처리 작업을 수행하고 실행 취소 지원을 원하지 않으면 관리 대상 개체 컨텍스트에 즉시 저장해야합니다. 그것은 정말로 문제가되어서는 안됩니다. 그렇다면 CoreData를 잘못 사용하고 있고 곧은 sqlite 또는 RDBMS를 사용하려고합니다. –

답변

4

관리 대상 개체를 가져 와서 삭제하려는 각 개체의 컨텍스트에 -deleteObject:을 보내야합니다.

코어 데이터가 관계에 지정된 계단식 또는 무효화 규칙을 따르도록 개체를 메모리로 가져와야합니다.

삭제와 관련하여 특정 성능 문제가있는 경우 (필수 가져 오기 이상) 인 스트 루먼트에서 작업을 프로파일 링하는 것이 도움이됩니다. 계단식/무효화 규칙이 적용될 때 개별적으로 오류가 발생하는 경우 관련 객체를 프리 페칭하면 성능이 향상됩니다.

0

NSManagedObjectContext에 범주 메서드 - (executeDeleteWithRequest : error :)를 추가 할 수 있습니다.

물론 반복 할 필요가 있지만 적어도 문제를 추상화하고 코드를 건조시킵니다.

관련 문제