2017-04-24 110 views
1

我不能为我的生活得到这个工作。我有一个'Match'实体和一个'Players'实体通过多对多关系连接起来。对于每场比赛,我试图创建一个从Core Data中的Players实体中提取的名称字符串。这里是什么,我一直在努力与实现这一最新的化身:在Swift核心数据中获取属性与许多关系

let players = matchData[indexPath.row].value(forKeyPath: "players") as? NSManagedObject 
    let playerNames = players?.value(forKey: "firstName") as? NSMutableArray 

    let playersString = playerNames?.componentsJoined(by: ",") 

matchDataNSManagedObject在我的获取数据被保持。 “玩家”是与“玩家”实体关系的名称。而“firstName”是我尝试串起来的属性。

然而,这对每场比赛都返回'nil',即使我确实知道每场比赛都有保存的球员记录。我可以很好地显示其他matchData项目,但遇到这种多对多关系时遇到问题。

回答

1

value(forKeyPath: "players") as? NSManagedObject

如果players确实是一个一对多的关系,那么这个代码将永远返回nil,因为它会尝试强制转换为NSManagedObject但实际类型是NSManagedObjectSet

value(forKeyPath: "players") as? Set<NSManagedObject>会让你过去的第一个障碍。

你会自己动手指定托管对象的子类,那么你将拥有为所有这些东西生成的属性,这将使你的代码更清晰和更容易理解。

+0

谢谢。我会看到我如何继续。是的 - 完全同意转向子类方法! – mallowman