我有一个类别实体和一个子类别实体。它是一对多的,因为一个类别可以有许多子类别。我仍在努力理解这一切,所以请耐心等待......
extension Category {
@NSManaged var name: String?
@NSManaged var subCategory: SubCategory?
}
extension SubCategory {
@NSManaged var name: String?
}
然后在代码中的其他地方(例如某些 View Controller )我进行此调用
let category = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as! Category
let sub = SubCategory()
sub.name = "sub1"
category.subCategory = sub
//save it
然后,当我查看实际的核心数据 Sqlite 数据库时,我可以看到类别实体的 ZSUBCATEGORY 列填充了子类别实体的主键值。我已经在数据模型中定义了关系。
我的问题是,我注意到一些关系是用 NSSet 存储的。这样做有什么好处吗?我做的事情是错误的还是过分的?对我来说,这似乎更简单,因为我可以这样做......
category.subcategory.name
获取子类别名称
最佳答案
如果是一对一的关系,确实可以这样做:
category.subcategory.name
这就是您在本例中所做的,您已经定义了一对一的关系。如果您想要一对多而不是定义它:
extension Category {
@NSManaged var name: String?
@NSManaged var subCategory: NSSet?
}
这种方式类别与子类别的数量相关联,所以如果您愿意的话
category.subcategory.name
您如何知道您正在访问哪个子类别?您必须遍历集合才能找到您想要查找的子类别。
关于swift - 核心数据中作为 NSSet 的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193240/