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 中,从 NSSet
到 Set
的桥接是自动发生的,所以如果你可以子类化 CoreData 实体,你可以只写:
@NSManaged var oneToManyOfTypeFoo: Set<Foo>
然后添加和删除元素变得微不足道,因为您只需使用 Set
.
中的 insert
和 remove
方法
在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 中,从 NSSet
到 Set
的桥接是自动发生的,所以如果你可以子类化 CoreData 实体,你可以只写:
@NSManaged var oneToManyOfTypeFoo: Set<Foo>
然后添加和删除元素变得微不足道,因为您只需使用 Set
.
insert
和 remove
方法