2010-04-28 3 views
4

내 NSManagedObjectContext의 모든 객체를 반복하고 수동으로 업데이트하려고합니다. 그런 다음 모든 관리 대상 객체를 업데이트해야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?NSManagedObjectContext 객체를 반복할까요?

+1

무엇을하려하십니까? 왜 이럴 필요가 있다고 생각하니? –

+0

처음에는 많은 정보가 잘못된 정보로 생성됩니다. 수동으로 수정해야합니다. – cactus

답변

5

이론적으로 관리 대상 개체 모델의 모든 엔터티 설명을 반복하고 해당 개체에 대한 조건부 인출 요청을 작성한 다음 반환 된 모든 개체를 반복하고 업데이트 할 수 있습니다. 예 : 당신이 NSManagedObjects 전송할 수 있습니다

// Given some NSManagedObjectContext *context 
NSManagedObjectModel *model = [[context persistentStoreCoordinator] 
           managedObjectModel]; 
for(NSEntityDescription *entity in [model entities]) { 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:entity]; 
    NSError *error; 
    NSArray *results = [context executeFetchRequest:request error:&error]; 
    // Error-checking here... 
    for(NSManagedObject *object in results) { 
     // Do your updates here 
    } 
}

주 (isKindOfClass: 또는 관련 방법을 사용하여) 클래스 어떤지를 판정하거나 entitymanagedObjectClassName 속성을 사용하여 (현재의 실체가 무엇인지 수준 파악으로 하나 필요에 반환 NSClassWithName() 방법과 함께).

+0

캐스팅이 필요하지 않습니다. 모든 fetch 메소드와 -objectAtIndex : 메소드는 id를 반환합니다. NSManagedObject의 모든 속성은 KVC를 통해 액세스 할 수 있으며 -doesRespondToSelector : –

+0

을 통해 쿼리 할 수 ​​있지만'doesRespondToSelector :'호출로 흩어져있는 코드로 인해 좌절하는 경향이 있습니다. 꼭 필요한 것은 아니지만 캐스팅은 훨씬 더 많은 읽을 수 있습니다. – Tim

4

이 문제는 매우 무거운 수동 방식입니다. 데이터에 잘못된 데이터가로드되는 경우 은 데이터를 가져 오는 동안 수정하는 것이 좋습니다. 팀의 대답은 당신이하고있는 일에 효과가있을 것입니다. 그러나 저는 당신이이 잘못을 저지르고 있다고 확신합니다. 잠재적 인 불량 데이터를 찾는 전체 데이터베이스를 반복하는 것은 매우 비효율적입니다.

+0

내가 게시 한 답변보다 훨씬 더이 접근 방식에 동의 할 것입니다. 잘못된 데이터가 "처음으로"가져 오는 것을 안다면 나중에 가져 오기가 아니라 가져 오기에서이를 수정할 수 있어야합니다. – Tim

0

'잘못된 데이터'로 관리 개체가 생성되는 경우 모든 개체의 모든 속성에 대해 모델에서 기본값을 설정했는지 확인해야합니다. 이 방법을 사용하면 객체를 컨텍스트에 삽입 할 때마다 해당 값이 포함됩니다. 거기에서 필요한 속성으로 속성을 설정할 수 있습니다.

관련 문제