核心数据中的关系为NSSet

时间:2016-05-12 17:03:50

标签: swift

我有一个Category实体和一个Subcategory实体。它是一对多的,因为一个类别可以有许多子类别。我仍然试图绕过这一切,所以请耐心等待......

extension Category {
    @NSManaged var name: String?
    @NSManaged var subCategory: SubCategory?
}


extension SubCategory {
    @NSManaged var name: String?
}

然后在代码中的其他地方,例如一些视图控制器,我进行此调用

let category = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as! Category
let sub = SubCategory()
sub.name = "sub1"

category.subCategory = sub

//save it

然后当我查看实际核心数据Sqlite db时,我可以看到Category实体的ZSUBCATEGORY列填充了子类别实体的主键值。我已经在数据模型中定义了关系。

我的问题是,我注意到一些关系存储在NSSet中。这样做有什么好处吗?我做错了什么并且非常恶劣?对我而言,这似乎更简单,因为我可以做...

category.subcategory.name 

获取子类别名称

1 个答案:

答案 0 :(得分:1)

如果是一对一的关系,确实可以这样做:

category.subcategory.name 

这就是你在这个例子中所做的,你已经定义了一对一的关系。如果你想要一个比你定义的更多:

extension Category {
    @NSManaged var name: String?
    @NSManaged var subCategory: NSSet?
}

这种类别与子类别的数量相关联,因此如果你愿意的话

category.subcategory.name

您如何知道您正在访问哪个子类别?你必须遍历集合,找到你想要找到的一个子类别。