2009-07-04 48 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。