【问题标题】:How to create a Core Data Relationship in Swift如何在 Swift 中创建核心数据关系
【发布时间】:2015-04-20 17:08:10
【问题描述】:

我的数据模型中有两个实体:学生 > 年级

在 Objective-C 中,我可以使用以下行来链接我的两个对象的关系:

[newStudent setValue:[NSSet setWithObject:newGrade] forKey:@"grades"];

然而在 Swift 中,没有 NSSet。我如何执行相同的操作?

newStudent.setValue(??????, forKey: "grades")

【问题讨论】:

  • 当我说“没有 NSSet”时我说错了。我的意思是 Swift 中没有原生集合。然而,正如 gregheo 所指出的,我现在看到 Swift 1.2 添加了一个新的 'Set' 类型。我想要一个使用这个原生 Set 的解决方案。
  • 您是否成功使用原生 Swift 'Set' 类型作为 '@NSManaged' 属性?我找不到任何人确认它在网上正常工作。
  • 我最终使用了 Martin R 建议的子类。当 Xcode 自动生成子类时,它定义了如下属性:@NSManaged var gradesRelationship: NSSet 然后在我的代码中我使用了 Swift Sets 类似这样的东西:var thisGradeSet:Set<NSObject>? var thisGrade:GradeElement? thisGradeSet = thisStudent!.gradesRelationship.filteredSetUsingPredicate(cellPredicate) var thisScore:Int = thisGrade!.score as Int thisScore = 95 thisGrade!.score = thisScore
  • 哎呀!对我评论中的格式感到抱歉。

标签: ios swift core-data set nsset


【解决方案1】:

在 Swift 中肯定有 NSSet:

newStudent.setValue(NSSet(object: newGrade), forKey: "grades")

在 Xcode 6.3 和 Swift 1.2 中,还有一个原生的 Set 类型。这通常会将NSSet 连接到Set<NSObject>。

【讨论】:

  • 您能告诉我在 Swift 1.2 中使用 Set 是如何完成的吗?谢谢!
【解决方案2】:

如前所述,您可以使用NSSet 来分配多对多关系。

但实际上分配逆(一对一)关系更容易 从Grade 到Student:

newGrade.setValue(newStudent, forKey: "student")

这将自动更新反向关系,即添加newGrade对象到newStudent的grades属性。

而你实际上应该做的是创建NSMangedObject 子类 为您的实体(在“Xcode-> Edit”菜单中),然后使用 属性访问器:

newGrade.student = newStudent

这更容易阅读,更容易编写,您不会冒险 在关键字符串中键入错误,编译器可以执行 正确的类型检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多