2013-04-24 4 views
0

일반 SyncEngine을 만들려고합니다. 다음과 같이, 나는 주어진 부모 개체를 가져 : 나는 다음을 수행 할 수있는 방법을 찾고 있어요CoreData 하위 항목을 가져와 클래스 이름을 찾는 방법은 무엇입니까?

__block NSArray *newRecords = nil; 
[[[CoreDataController sharedInstance] managedObjectContext] performBlockAndWait:^{ 
    NSError *error = nil; 
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:className]; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"serverID = nil"]; 
    [request setPredicate:predicate]; 
    newRecords = [[[CoreDataController sharedInstance] managedObjectContext] executeFetchRequest:request error:&error]; 
}]; 

:

  1. 테스트 검색된 엔티티가 "아이들"이 있는지.
  2. 그렇다면 자녀의 클래스 이름을 찾고 싶습니다.

할 방법이 있습니까?

+0

하위 엔티티 (className은 상위 엔티티 임) 또는 관계를 통해 연결된 엔티티를 의미합니까? – Mundi

+0

차이점을 이해할 수 있는지 확실하지 않습니다 ... –

+0

className은 (모델에 정의 된) 다른 엔터티와 관계가있는 엔터티 (NSManagedObject)입니다. 위의 코드에서 CoreData에서 className을 가져 와서 자식 엔터티의 이름을 가져 오는 방법을 원합니다. –

답변

0

자녀 엔티티의 기본 클래스가 동일합니다.
해당 기본 클래스 NSString에 속성을 추가하십시오 (className). 에서

당신의 <BaseEntity>.h (편집기 -로 이동하여 파일을 생성하는> NSManagedObject 서브 클래스를 생성) :
지금처럼 - (void) awakeFromInsert을 구현 :

NSExpressionDescription* idDesc = [NSExpressionDescription new]; 
[idDesc setName:@"objectID"]; 
[idDesc setExpression:[NSExpression expressionForEvaluatedObject]]; 
[idDesc setExpressionResultType:NSObjectIDAttributeType]; 

NSFetchRequest* request = [NSFetchRequest alloc] initWithEntityName:@"<BaseEntity>"]; 
request.predicate = [NSPredicate predicateWithFormat:@"parent = %@",parent.objectID]; 
[request setResultsType:NSDictionaryResultType]; 
[request setPropertiesToFetch:@[@"className",idDesc]]; 
:

- (void) awakeFromInsert 
{ 
    self.className = self.entity.name; 
} 

요청 지금해야 가져

이 요청은 요청한 데이터가 포함 된 사전 배열을 반환합니다.

관련 문제