我正在将CoreData引入到包含to-Many-Relations的对象的现有类中。 之前我会有这样的事情: “播放器”只是一个带有结果数组的普通类......
for (y,result) in player.result!.enumerate() {
现在我必须这样做......
for (y,result) in (player.relResults!.allObjects as! [CDResult]).enumerate()
有更好的方法吗? 有没有办法避免这种难看的铸件?
答案 0 :(得分:0)
NSManagedObject
中表示可选的多对多关系
子类作为可选NSSet
:
@NSManaged var results: NSSet?
所以这里失去了关系的目标实体的类型,
并且需要一些投射。但你不必转换
设置为数组。您可以将其投射到相应的Set
输入并迭代集合:
for result in player.results! as! Set<CDResult> { ... }
请注意,player.results
可以是nil
,因此应该检查这一点
之前,或包含在if let
或{。}}的可选绑定中
guard let
。
您还可以将属性定义更改为
@NSManaged var results: Set<CDResult>?
然后简单地用
进行迭代for result in player.results! { ... }
缺点是如果重新生成,则更改会丢失
Xcode中的托管对象子类。也许是未来的版本
Xcode将为多对多关系创建Set<T>
类型的属性。
(您也可以查看"mogenerator"这是一种替代工具 创建具有一些很好的附加功能的托管对象子类。可能是发电机更好地处理这个问题。)