Swift 2.0一对多关系 - 仍然是NSOrderedSet?

时间:2015-08-21 01:38:02

标签: ios swift core-data nsorderedset

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

我似乎无法适当地投射/投降,不会抛出错误。

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

2 个答案:

答案 0 :(得分:4)

仅当您使用“已订购”选项标记关系时。如果没有,则为NSSet

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

@NSManaged var oneToManyOfTypeFoo: Set<Foo>

然后添加和删除元素变得微不足道,因为您可以使用insert中的removeSet方法。

答案 1 :(得分:1)

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

在Swift中保存to-many关系有这个线程: How to define CoreData relationship in Swift?

但是,唉!在这个帖子中没有提到的任何东西都适用于Swift 2.0世界。那么现在的解决方法是什么?我深入研究了这个问题,唯一可行的方法就是在Objective C中为有问题的实体生成源代码,而不是在swift中导出它们并在桥接头中导出它们的头部。此外,您需要确保为Xcode包含一个重要的变通方法修复程序,以便为有序集合生成适当的访问器:

https://github.com/CFKevinRef/KCOrderedAccessorFix

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

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

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

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