我不能为我的生活得到这个工作 . 我有一个'匹配'实体和一个由多对多关系加入的'玩家'实体 . 对于每个匹配,我试图创建一个从Core Data中的Players实体中提取的名称字符串 . 以下是我一直试图通过以下方式实现此目标的最新版本:
let players = matchData[indexPath.row].value(forKeyPath: "players") as? NSManagedObject
let playerNames = players?.value(forKey: "firstName") as? NSMutableArray
let playersString = playerNames?.componentsJoined(by: ",")
matchData
是 NSManagedObject
,其中保存了我提取的数据 . "players"是与"Players"实体的关系的名称 . 并且"firstName"是我尝试串联的属性 .
然而,即使我确定每场比赛都保存了球员记录,但每次比赛都返回'nil' . 我可以很好地显示其他matchData项目,但我遇到了这个多对多关系的问题 .
1 回答
value(forKeyPath: "players") as? NSManagedObject
如果
players
实际上是一个多对多关系,则此代码将始终返回nil,因为它将尝试强制转换为NSManagedObject
但实际类型为Set
的NSManagedObject
.value(forKeyPath: "players") as? Set<NSManagedObject>
会让你超越第一道障碍 .您也可以自己帮忙指定托管对象子类,然后您将为所有这些内容生成属性,这将使您的代码更清晰,更易于理解 .