如何在 Swift 的 NSManagedObject
子类中将对象添加到关系属性?
在 Objective-C 中,当您从数据模型在 Xcode 中生成 NSManagedObject
子类时,会自动生成一个类扩展,其中包含如下声明:
@interface MyManagedObject (CoreDataGeneratedAccessors)
- (void)addMySubObject: (MyRelationshipObject *)value;
- (void)addMySubObjects: (NSSet *)values;
@end
但是,Xcode 目前缺少为 Swift 类生成此类的能力。
如果我尝试直接在 Swift 对象上调用等效方法:
myObject.addSubObject(subObject)
...我在方法调用时遇到编译器错误,因为这些生成的访问器不可见。
我已将关系属性声明为 @NSManaged
,如文档中所述。
或者对于具有关系的数据模型,我是否必须恢复为 Objective-C 对象?
最佳答案
从 Xcode 7 和 Swift 2.0 开始(参见 release note #17583057),您只需将以下定义添加到生成的扩展文件中:
extension PersonModel {
// This is what got generated by core data
@NSManaged var name: String?
@NSManaged var hairColor: NSNumber?
@NSManaged var parents: NSSet?
// This is what I manually added
@NSManaged func addParentsObject(value: ParentModel)
@NSManaged func removeParentsObject(value: ParentModel)
@NSManaged func addParents(value: Set<ParentModel>)
@NSManaged func removeParents(value: Set<ParentModel>)
}
这是可行的,因为
The NSManaged attribute can be used with methods as well as properties, for access to Core Data’s automatically generated Key-Value-Coding-compliant to-many accessors.
添加此定义将允许您将项目添加到您的集合中。不确定为什么这些不只是自动生成...
关于ios - 在 Swift 中设置 NSManagedObject 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146524/