CoreData处理集

时间:2015-10-31 10:53:14

标签: swift core-data

我正在将CoreData引入到包含to-Many-Relations的对象的现有类中。 之前我会有这样的事情: “播放器”只是一个带有结果数组的普通类......

for (y,result) in player.result!.enumerate() {

现在我必须这样做......

for (y,result) in (player.relResults!.allObjects as! [CDResult]).enumerate() 

有更好的方法吗? 有没有办法避免这种难看的铸件?

1 个答案:

答案 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"这是一种替代工具 创建具有一些很好的附加功能的托管对象子类。可能是发电机更好地处理这个问题。)