我有一个 DeviceContactModel
和一个 DeviceContactPhoneModel
继承自 Object
( Realm )。 DeviceContactModel
有一个 List
<DeviceContactPhoneModel>
.我想过滤 DeviceContactModel
通过 DeviceContactPhoneModel
之一属性(property)。我制作了测试代码,但它调用了应用程序崩溃。请告诉我如何实现?谢谢。
class DeviceContactModel: Object, Mappable {
@objc dynamic var id = ""
@objc dynamic var givenName = ""
@objc dynamic var familyName = ""
@objc dynamic var updateTimestamp = 0.0
var isNew = false
let phones = List<DeviceContactPhoneModel>()
}
final class DeviceContactPhoneModel: Object, Mappable {
@objc dynamic var id = ""
@objc dynamic var contactID = ""
@objc dynamic var updateTimestamp = 0.0
@objc dynamic var countryCode: Int64 = 0
@objc dynamic var nationalNumber: Int64 = 0
@objc dynamic var fullNumber: Int64 = 0
}
测试函数
private func getDeviceContacts(_ phoneNumbers: [Int64]) -> [DeviceContactModel] {
do {
let realm = try Realm()
let deviceContacts = Array(realm.objects(DeviceContactModel.self).filter("phones.fullNumber IN %@", phoneNumbers))
return deviceContacts
} catch {
debugPrint(error.localizedDescription)
return []
}
}
崩溃日志 无效谓词',原因:'包含数组属性的关键路径必须使用聚合操作
最佳答案
试试这个解决方案
如果你使用一对多关系,你使用ANY
操作符
请仔细阅读这篇文章,以便您了解使用什么,因为还有另一个运算符,例如 ALL,ANY,NONE
Predicate Programming Guide
private func getDeviceContacts(_ phoneNumbers: [Int64]) -> [DeviceContactModel] {
do {
let realm = try Realm()
let deviceContacts = Array(realm.objects(DeviceContactModel.self).filter("ANY phones.fullNumber IN %@", phoneNumbers))
return deviceContacts
} catch {
debugPrint(error.localizedDescription)
return []
}
}
关于ios - 如何按列表过滤 Realm 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925537/