2009-07-04 47 views
2

我有一個相當複雜的託管數據模型,它有一箇中心對象,它具有許多依賴於各種屬性值的關係。我使用plists集合將初始數據導入模型,每個plist指定實體類的屬性,然後根據這些屬性填充關係。如何實現/增強核心數據關係getter/setter?

我想修改關係的getter,以自動獲取受屬性約束的對象。這裏的推理是對建立關係進入被管理對象,進行輸入邏輯的,但我沒能做出飛如:

假設SubclassedManagedObject.m:

-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 } 

這自爆向上在管線6與編譯時:

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

,並在線路A,其中基於attR1位的值構建謂詞:

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

我的問題是我想做什麼或更可能做什麼,有沒有更好的方法來實現這一目標?

回答

2

好吧,這很尷尬。我在Apple的documentation中找到了我的問題的答案。

所以relation1的getter變化的實施:

- (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; 
} 

我的錯誤是治療的屬性爲傳統的ivars。