2011-03-08 3 views
0

NSDate 형식의 OrderDate 속성이있는 NSManagedObject 파생 클래스 OrderMO가 있습니다. OrderDate의 기본값은 이미 주문이없는 첫 달의 첫 번째 월요일이됩니다.기존 NSManagedObject 값을 기반으로 NSManagedObject 파생 클래스의 기본값을 어떻게 설정할 수 있습니까?

- (void) awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    [self setValue:[self getNextOrderDate] forKey:@"OrderDate"]; 
} 

사용자 정의 함수 getNextOrderDate 적절한 날짜를 계산하고 그것을 반환

내가 NSManagedObject의 awakeFromInsert 기능을 무시하고 같은 주문일의 값을 설정하고이 작업을 수행합니다. 문제는 getNextOrderDate가 awakeFromInsert 호출 중에 no-no 인 executeFetchRequest를 호출한다는 것입니다. this article에 설명 된 작업을 시도했지만 문제가 해결되지 않았습니다. 이 기사에서는 자체 performSelector를 호출하여 NSManagedObject를 초기화 할 때까지 executeFetchRequest 호출을 지연시키는 방법으로 문제를 해결합니다. 제 경우에는 2 개의 가비지 행을 얻습니다.

내 주문 ArrayController를 하위 클래스로 분류하여 add 함수를 재정의 한 것으로 간주했지만 실제로 수행 할 작업을 알지 못합니다.

누군가가 동일한 개체 형식의 기존 NSManagedObjects를 기반으로 NSManagedObject 속성을 초기화하는 적절한 방법을 말해 줄 수 있습니까? 기존 배열의 값에 따라 달라지는 값을 가진 동일한 배열에 있습니까?

답변

1

글쎄, 한 가지 방법은 특정 값에 대한 패치를 수행하는 것입니다. 그저 사전을 반환하고 나는 오류나 객체를 가져 오는 것과 연관된 모든 통지를 트리거하지 않을 것이라고 확신한다. 모든 종소리와 호루라기를 벗어나지 않고 원하는 날짜 하나만 추출 할 수 있어야합니다. 그러나, 나는이 특별한 상황에서 그것을 결코 테스트 해 보지 못했습니다.

또 다른 접근법은 managedObject를 직접 생성하는 것입니다. 즉 managedObject가 아닌 것과 같이 원하는대로 속성을 채우고 managedObject를 컨텍스트에 삽입하는 것입니다. 매우 우아하지는 않지만 작동 할 것이고 많은 알림을 시작하지는 않을 것입니다.

일부 핵심 데이터 손은 자신의 NSManagedObject 하위 클래스에 대한 고유 한 삽입 클래스 메서드를 작성합니다. 여기서 고용하고 싶을 수도 있습니다. 예 :

+(OrderMO *) insertOrderMOIntoManagedObjectContext:(NSManagedObjectContext *) aContext{ 
    OrderMO *newOrder=[[OrderMO alloc] init]; 
    // pefrom fetch on aContext to find the next order date 
    newOrder.orderDate=//... fetched order date 
    [aContext insertObject:newOrder]; 
} 
관련 문제