2009-11-09 3 views
4

iPhone의 경우 핵심 데이터에 저장중인 항목의 모든 인스턴스에 대해 필드를 대량 업데이트 할 수 있습니까?코어 데이터의 모든 엔티티에 대한 대량 업데이트 작업이 있습니까?

갱신 같은 뭔가 some_count을 설정 some_entities = 0 여기서 some_count> 0

아니면 그냥 모든 개체를 인스턴스화해야하는 값을 설정 할, 다음 저장? (답이 맞다면 세트가 너무 커서 메모리에 맞지 않는다고 가정 할 때 단일 트랜잭션에서 어떻게 할 수 있습니까?)

답변

2

아니요, 코어 데이터에는 대량 업데이트 기능이 없습니다. 메모리가 부족한 경우 데이터 모델을 재 설계하여 작업을 단순화하는 것이 좋습니다. 각 엔티티에 대한 절대 수를 저장하는 대신 엔티티 그룹에 대한 마스터 값을 추적하고 엔티티 당 해당 값의 델타를 저장하십시오.

코어 데이터는 SQL 용어로 생각해 본 사람들에게는 절망적 일 수 있습니다.

7

이것은 코어 데이터에서 제공하지 않지만 핵심 데이터 관리 대상 객체의 NSSet 또는 NSArray에 대한 makeObjectsPerformSelector:withObject: 메소드를 사용할 수 있습니다.
선택자로 setter 접근자를 전달하고 값을 객체로 전달하십시오. 관리 객체가 모두 동일하게 설정해야합니다 속성 "이름"이있는 경우

예를 들어, :

[[fetchedResultsController fetchedObjects] makeObjectsPerformSelector:@selector(setName:) withObject:@"name for all"]; 

당신은 NSFetchedResultsController이 필요하지 않습니다. NSFetchRequest의 배열 또는 Core Data 엔티티 간의 다 대다 관계의 NSSet을 사용할 수 있습니다.

4

핵심 데이터는 데이터베이스가 아닙니다. 개체를 일괄 업데이트하려면 가져 와서 값을 직접 업데이트해야합니다.

좋은 방법은 fetchLimit 세트로 NSFetchRequest을 사용하여 한 번에 100 개를 가져 와서 업데이트 한 다음 관리되는 개체 컨텍스트를 저장하는 것입니다. 모든 물체가 업데이트 될 때까지 물로 헹구십시오.

그리고 gerry가 제안한 것처럼 업데이트가 간단하면 makeObjectsPerformSelector:을 사용하여 한 줄로 업데이트 할 수 있습니다.

관련 문제