一尘不染

在Swift中设置NSManagedObject关系

swift

如何NSManagedObject在Swift 的子类中将对象添加到关系属性中?

在Objective-C中,当您NSManagedObject从数据模型以Xcode 生成子类时,会自动生成一个包含以下声明的类扩展:

@interface MyManagedObject (CoreDataGeneratedAccessors)

     - (void)addMySubObject: (MyRelationshipObject *)value;
     - (void)addMySubObjects: (NSSet *)values;

@end

但是,Xcode当前缺少Swift类的此类生成功能。

如果我尝试直接在Swift对象上调用等效方法:

myObject.addSubObject(subObject)

…我在方法调用中遇到编译器错误,因为这些生成的访问器不可见。

@NSManaged如文档中所述,我已将Relationship属性声明为。

还是我必须还原为具有关系的数据模型的Objective-C对象?


阅读 232

收藏
2020-07-07

共1个答案

一尘不染

是的,这将不再起作用,Swift无法以这种方式在运行时生成访问器,这会破坏类型系统。

您要做的就是使用关键路径:

var manyRelation = myObject.valueForKeyPath("subObjects") as NSMutableSet
manyRelation.addObject(subObject)
/* (Not tested) */
2020-07-07