2017-01-22 7 views
0

スウィフトレルムを使って、私は親の視点から子供の所有者を得たいと思っています。簡単に言えばレルム - 親子関係にあるエンティティの所有者のリストを取得する方法は?

は、エンティティの関係のように説明することができます:指定された親を使用して

Parent -< Child <- Player

、私はプレイヤー(所有者)のリストを取得したいです。

私は私の質問をしようとすると私の質問は間違っていると信じています。

// 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 [email protected] > 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

私はこの問題を解決しました。

  1. 子供を追加するプレーヤーデータはありませんでした。私は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 [email protected] > 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) 
         } 
        } 
    

テストが合格し、いくつかのコンソールログを私は私の期待を確認することができました。

問題が解決しました。

クローズ。

関連する問題