【问题标题】:Get associated object value from filter query using Realm swift使用 Realm swift 从过滤器查询中获取关联的对象值
【发布时间】:2019-02-04 05:45:47
【问题描述】:

所以我对领域很陌生,我觉得我的问题很基本,但我找不到答案。

基本上,我正在尝试查询与特定TeamID 关联的所有playerName 的领域(即TeamID 不是主键),但是我无法找到解决方案。我不断收到Value of type 'Results<playerInfoTable>' has no member 'playerName' 错误。

下面是我的 Realm 类:
`class playerInfoTable: 对象 {

@objc dynamic var playerID: Int = 0
@objc dynamic var playerName: String = ""
@objc dynamic var jerseyNum: Int = 0
@objc dynamic var TeamID: String = ""
@objc dynamic var goalCount: Int = 0
@objc dynamic var shotCount: Int = 0

override class func primaryKey() -> String {
    return "playerID"
}

}`

我正在使用查询领域的代码:

let mainPlayerFilter = NSPredicate(format: "teamID == %@", "1")
let mainPlayerStrings = realm.objects(playerInfoTable.self).filter(mainPlayerFilter)
let mainPlayerTeamName = mainPlayerStrings.playerName

解决方案!

let mainPlayerFilter = NSPredicate(format: "TeamID == %@", String(homeTeam!))
let mainPlayerStrings = realm.objects(playerInfoTable.self).filter(mainPlayerFilter)
let mainPlayerTeamName = mainPlayerStrings.value(forKeyPath: "playerName") as! [String]

【问题讨论】:

  • 很高兴您找到了解决方案。然而,这对未来的读者来说毫无意义,因为 homeTeam 变量是未定义的,所以我们不知道它是什么。另外,您应该考虑创建一个具有主键的 Team 对象,然后将该键存储在每个玩家的属性中。和/或将 Payers List 属性添加到 Team 对象,并将每个玩家与该团队相关联。这样做可以完全避免查询,因为当您加载团队时,您将在 player 属性中拥有指向所有该团队球员的链接。

标签: swift realm


【解决方案1】:

我想您在声明 mainPlayerTeamName 常量时会遇到错误。请尝试以下操作:

let mainPlayerTeamName = mainPlayerStrings.first?.playerName

我注意到,在您的 playerInfoTable 类中,您将“teamID”声明为“TeamID”,而在您的谓词中,您将其称为“teamID”。决定你想要哪一个,因为 NSPredicate 默认区分大小写。

【讨论】:

  • 正在寻找 Realm 返回一个基于所有 playerName 的结果,其中某个 TeamID 不只是第一个。不过,我已经用解决方案更新了我的帖子!
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多