swift - 核心数据中作为 NSSet 的关系

标签 swift

我有一个类别实体和一个子类别实体。它是一对多的,因为一个类别可以有许多子类别。我仍在努力理解这一切,所以请耐心等待......

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/

相关文章:

ios - 调用 'becomeFirstResponder()' 的结果是 UITableView 中未使用的 UITextField

html - UILabel sizetofit 隐藏了属性文本中的一些单词

ios - 使用 equalToSystemSpacingAfter 前后边距的布局

ios - 使用SK3DNode在SpriteKit中显示SceneKit粒子对象

swift - MKMapView NSInvalidArgumentException 无效区域在 ios 9 swift 中崩溃?

ios - 我如何将这个 Swift 3 Singleton 用作我的 IOS 项目的全局计时器?

json - 解析 JSON 数据时解码错误 - keyNotFound

swift - 使用 `self` 作为静态/类方法的默认参数

ios - 通过 Azure 的 Google 登录错误

swift - NSNotificationCenter userInfo 中的字典值类型