Swift 2.0 一对多关系 - 还是 NSOrderedSet?

Swift 2.0 one-to-many relationship - still NSOrderedSet?

在Swift 2.0中,Core Data中的一对多关系是否仍然是NSOrderedSets?

我似乎无法 cast/downcast 适当地不抛出错误。

有人在 Swift 2.0 中有这方面的简单示例吗?

不幸的是,具有 swift 的 CoreData 仍然是一个巨大的痛苦,尤其是对于有序的 one-many 关系。是的,CoreData 仍将 NSOrderedSet 用于 to-many 关系。问题是如何add/remove 项到此。到目前为止,Xcode 从未能够为有序集正确生成访问器 - 即使在 Objective 中,更不用说 Swift!!。

在 Swift 中有关于保存 to-many 关系的帖子: How to define CoreData relationship in Swift?

但是,唉!这个帖子中提到的任何内容在 Swift 2.0 世界中都不起作用。那么现在的解决方法是什么?我对此进行了深入研究,实现此功能的唯一方法是在 Objective C 中而不是在 swift 中为有问题的实体生成源并将它们的 header 导出到桥接 header。此外,您还需要确保包含 Xcode 的重要解决方法修复程序,以便为有序集生成正确的访问器:

https://github.com/CFKevinRef/KCOrderedAccessorFix

您应该确保拨打- model.kc_generateOrderedSetAccessors() 在 AppDelegate 中的模型创建代码中调用此修复程序。

完成后,您现在可以安全地开始使用模型上生成的访问器将项目添加到 to-many 关系。

我创建了一个示例项目并在 github 中,希望它对您有所帮助-

https://github.com/shripada/CoreDataToManyRelationshipInSwift2.0

仅当您使用选项 "Ordered" 标记关系时。如果不是,那就是 NSSet.

我不同意接受的答案,因为在 Swift 2.0 中,从 NSSetSet 的桥接是自动发生的,所以如果你可以子类化 CoreData 实体,你可以只写:

@NSManaged var oneToManyOfTypeFoo: Set<Foo>

然后添加和删除元素变得微不足道,因为您只需使用 Set.

中的 insertremove 方法