swift - Realm - 如何获取父子关系中实体所有者的列表?

标签 swift subquery realm nspredicate

使用 Swift Realm,我想从 parent 的角度获得 child 的所有者。

简单来说,实体关系可以描述为:

Parent -< Child <- Player

我想使用给定的 Parent 获取玩家(所有者)列表。

当我尝试查询时,我认为我的查询是错误的;

// Cut-down summary of Realm objects and relationships
public class Parent: Object {
  var children = List<Child>()
}
public class Child: Object {
  private let parents = LinkingObjects(fromType: Parent.self, property: "children")
  private let owners = LinkingObjects(fromType: Player.self, property: "children")
  var parent:Parent? {
      return self.parents.first
  }
  var owner: Player? {
      return self.owners.first
  }
}
public class Player : Object {
  public let children = List<Child>()
}



let realm = try! Realm()
self.createPlayers(amount: 5)
let playerList = realm.objects(EYPlayer.self)
XCTAssert(playerList.count == 5)


// In my tests:
let firstParent = realm.objects(Parent.self).first
let firstChild = firstParent?.children.first
let firstPlayer = realm.objects(Player.self).first

// Assign the first player with the first child
try! realm.write {
    firstPlayer?.children.append(firstChild!)
}

// give me a list of owners for a given parent
let owners = realm.objects(Parent.self).filter("ANY children.owners.@count > 0")
print (owners)

// Test fails; it says there are 0 results
XCTAssert(owners.count == 1, "Expected: 1, Found: \(owners.count)")

这个测试失败了:

XCTAssert(owners.count == 1, "Expected: 1, Found: \(owners.count)")

我希望有 1 个所有者。

但相反,我有 0 个所有者。

我做错了什么?

如何使用 NSPredicates 和 Realm 获取给定子项的所有者列表?

非常感谢

编辑:发现我没有添加任何玩家;添加播放器的摘要版本如上所示

最佳答案

我现在已经解决了这个问题。

  1. 没有玩家数据可以追加 child ;我已经在我的 xctests 中解决了这个问题
  2. 执行此操作并对我的测试进行一些调整后,查询似乎有效并在我的记录器输出中进行了验证。

        let firstParent = realm.objects(Parent.self).first
        let firstPlayer = realm.objects(Player.self).first
        let firstChild = firstParent?.children.first
    
        XCTAssert(firstChild?.parent == firstParent)
    
        try! realm.write {
            firstPlayer!.children.append(firstChild!)
        }
    
        let listOfChildren = realm.objects(Parent.self).filter("ANY children.owners.@count > 0")
        XCTAssert(listOfChildren.count == 1)
        XCTAssert(firstPlayer?.children.count == 1)
    
        for child in listOfChildren {
            for (index, eng) in child.children.enumerated() {
                if (index == 0) {
                    XCTAssert(eng.owner != nil)
                }
                XCTAssert(child.parent == loco)
            }
        }
    

测试通过,并且通过一些控制台日志我能够验证我的期望。

问题已解决。

关闭。

关于swift - Realm - 如何获取父子关系中实体所有者的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789832/

相关文章:

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

swift - xcode8 更新 "Use of instance member ' 类型 Realm 对象后出错

iOS Realm 对象通过引用或重复对象

mysql - 通过具有 GROUP BY 的子查询获取行数 - MySQL

swift - 在 Chat App 中为每个用户创建 Realm DB

ios - SWIFT:在 UIImage 下绘制 UILabel

ios - Facebook SDK iOS with Swift - 请求好友列表 - 方法说明

xcode - rangeOfString 每次都不返回 nil

ios - 如何使用连接到 AVAudioEngine 混音器的节点同时播放缓冲区中的多个声音

mysql - 在 MySQL 中嵌套多个 SELECT 语句的正确方法是什么