2016-12-04 6 views
2

So habe ich in letzter Zeit gelernt Realm in Swift und ich stolpere mit einem Design-Problem in Bezug auf eine mögliche Benachrichtigung zwischen Datenmodellen. Es wäre sehr zu begrüßen, wenn jemand bereit ist, Einblick zu gewähren.Querverweis Prädikat für Realm-Abfragen in Swift

// 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" 
    } 
} 


Ich habe eine Benachrichtigungsblock für Object A in der Steuerung eingestellt. Wenn also Änderungen in resultObjectsA stattfinden, wird der Benachrichtigungsblock ausgelöst.

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


In der App, die ich baue, kann der Benutzer einen Satz von Object A wählen, und die App wird den Status der vom Server eingestellten Auswahl abfragen. Die Ergebnisse werden in Object B gespeichert/dargestellt. Nun, ich brauche eine Abfrage/Prädikat für Object B schreiben:

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

so dass propertyA in resultObjectB Einträge können in propertyA in resultObjectsA Einträge gefunden werden, wie eine Eins-zu-Eins-Abbildung.

Ich bin nicht sicher, ob ein solches Prädikat machbar ist. Wenn es andere Wege gibt, um das zu erreichen, was ich hier tun möchte, möchte ich auch mehr lernen.

Antwort

1

alle abzufragen (eigentlich sollte es wegen der Primärschlüssel der Lage, ein Objekt sein) Objekte B wo objectB.propertyA == objectA.propertyA Verwendung:

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

Eine weitere Option ist One-to-One-Beziehung zwischen A und B zu verwenden, lernen mehr unter https://realm.io/docs/swift/latest/#to-one-relationships