2009-07-04 2 views
2

필자는 다양한 속성의 값에 의존하는 많은 관계가있는 중앙 개체가있는 관리 데이터 모델을 상당히 가지고 있습니다. 나는 plist 집합을 사용하여 모델에 초기 데이터를 가져 왔으며 각 plist는 엔티티 클래스에 대한 속성을 지정하고 그 속성을 기반으로 관계를 채 웁니다.코어 데이터 관계 getter/setter 구현/보완 방법은 무엇입니까?

관계에 대한 getter를 수정하여 속성에 의해 제약 된 객체를 자동으로 가져 오려고했습니다. 여기 추론은 관리 객체로하고 수입 로직 밖으로 관계 구축을 이동했지만, 예를 들면 그 날 만들 수 없습니다 :이 불었다

-1 #import "SubclassedManagedObject.h' 
0 #import "OtherManagedObject.h" 

1 @implementation SubclassedManagedObject 
2 @dynamic attr1 
3 @dynamic relation1 // which is an OtherManagedObject 

4 - (OtherManagedObject *)relation1 
5 { 
6  if(relation1 != nil) 
7  return relation1; 

8  NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
9  [request setEntity://the OtherManagedObject entity]; 
A  [request setPredicate://predicate based on attr1]; 

B  NSArray *results; 
C  results = [[self managedObjectContext] executeFetchRequest:request//..]; 

D  if([results count]) 
E  relation1 = [results objectAtIndex:0]; 
F } 

:

가설 SubclassedManagedObject.m 위로 라인 6에서 컴파일 할 때 :

 
error: 'attr1' undeclared (first use in this function) 
: ATTR1의 값에 따라 조건을 만드는 곳

 
error: 'relation1' undeclared (first use in this function) 

와 A 라인에

내 질문에 내가 할 수있는 일이 더 많거나 가능성이 더 높습니다. 더 좋은 방법이 있습니까?

답변

2

글쎄, 어색합니다. Apple의 documentation에서 내 질문에 대한 답을 찾았습니다.

그래서에 relation1의 게터 변경의 구현 :

- (OtherManagedClass *)relation1 
{ 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:// the entity]; 
    [request setPredicate:// predicate using attr1]; 
    NSArray *results 
    results = [[self managedObjectContext] executeFetchRequest:// ...]; 
    if([results count]) 
     return [results objectAtIndex:0]; 
    return nil; 
} 

내 실수가 기존의 인스턴스 변수와 속성을 치료했다.

관련 문제