我有一个相当复杂的托管数据模型,它有一个具有许多关系的中心对象,这些关系取决于各种属性的值。我正在使用 plist 集将初始数据导入模型,每个 plist 指定实体类的属性,然后根据这些属性填充关系。
我想修改关系的 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 行编译时崩溃了:
错误:“relation1”未声明(在此函数中首次使用)
在 A 行,根据 attr1 的值构建谓词:
错误:“attr1”未声明(在此函数中首次使用)
我的问题是我想做的可能或更可能,有没有更好的方法来实现这一点?