ios - 如何按列表过滤 Realm 对象

标签 ios swift filter realm

我有一个 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/

相关文章:

ios - 绘制矩形导致错误,无法引用 myview

ios - Swift:尝试导入 UIKit 时出错

ios - Swift & Firebase - 进一步添加 "headers"

javascript - renameFiles - 获取文件名数组并根据它们在数组中出现的次数重命名它们

objective-c - 无法为 UIImage 创建新的 socket 连接

ios - Flutter 应用程序卡在设备的初始屏幕上

iphone - 适用于 iPhone 5 的 iOS 模拟器 - 1136 x 640 分辨率

swift - 字符串(数据 : data, 编码:NSUTF8StringEncoding)返回 nil

javascript - 使用javascript从下面的对象中获取键值对

python - 连续时间输入函数的低通滤波器(在python中)的实现