8

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

我似乎无法适当地投射/向下投射以永远不会抛出错误。

有人在 Swift 2.0 中有一个简单的例子吗?

4

2 回答 2

4

仅当您使用“有序”选项标记关系时。如果不是,那么它是一个NSSet.

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

@NSManaged var oneToManyOfTypeFoo: Set<Foo>

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

于 2016-02-19T15:10:55.973 回答
1

不幸的是,使用 swift 的 CoreData 仍然是一个巨大的痛苦,尤其是在有序的一对多关系中。是的,CoreData 仍然将 NSOrderedSet 用于多对多关系。问题是如何添加/删除项目。到目前为止,Xcode 从未能够为有序集正确生成访问器——即使在 Objective 中,更不用说 Swift 了!

在 Swift 中保存多对关系有这个线程: 如何在 Swift 中定义 CoreData 关系?

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

https://github.com/CFKevinRef/KCOrderedAccessorFix

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

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

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

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

于 2015-08-21T06:32:50.233 回答