2016-12-04 9 views
2

最近、SwiftのRealmを学習しています。データモデル間の潜在的な通知に関する設計上の問題が発生しました。誰かがある程度の洞察を払うつもりなら、大いに感謝します。SwiftのRealmクエリーの相互参照述語

// Class A is what users mainly interact with 
Class A: Object { 
    dynamic var propertyA = "" 
    dynamic var propertyB = "" 
    dynamic var propertyC = "" 

    override static func primaryKey() -> String? { 
     return "propertyA" 
    } 
} 

// Class B is what the server interacts with, like data feeding 
Class B: Object { 
    dynamic var propertyA = "" 
    dynamic var propertyX = "" 
    dynamic var propertyY = "" 
    dynamic var propertyZ = "" 

    override static func primaryKey() -> String? { 
     return "propertyA" 
    } 
} 


Iはコントローラ内部Object Aの通知ブロックを設定しています。したがって、変更がresultObjectsAで発生するたびに、通知ブロックがトリガーされます。私が構築していますアプリで

let resultObjectsA = realm.objects(A).filter('predicate1') 
let notificationTokenA = resultObjectsA.addNotificationBlock { 
    ... 
} 


、ユーザーがObject Aのセットを選択することができ、そしてアプリは、サーバから選択セットの状態を照会します。返品結果はObject Bに保存されます。今、私はObject Bのクエリ/述語を記述する必要があります。

let resultObjectsB = realm.objects(B).filter('predicate2') 

propertyAresultObjectBのエントリは一対一のマッピングと同様に、propertyAresultObjectsAのエントリで見つけることができるようになっています。

このような述語が実行可能かどうかはわかりません。私がここでやりたいことを達成するための他の方法があれば、私も学びたいと思っています。すべてを照会する

答えて

1

(実際にあるため、主キーのことが一つのオブジェクトがあるはず)BどこobjectB.propertyA == objectA.propertyA使用するオブジェクト:

let resultObjectsB = realm.objects(B).filter('propertyA = %@', objectA.propertyA) 

別のオプションが学び、AB間の一対一の関係を使用することですが詳細はhttps://realm.io/docs/swift/latest/#to-one-relationships