2016-12-04 39 views
2

因此,我最近一直在Swift中学习Realm,并且遇到了关于数据模型之间潜在通知的设计问题。如果有人愿意提供一些见解,将不胜感激。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" 
    } 
} 


我为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) 

另一种选择是使用一对1 AB之间的关系,学习更多信息https://realm.io/docs/swift/latest/#to-one-relationships