【问题标题】:NSPredicate for filtering array of primitives field in Realm 3NSPredicate 用于过滤 Realm 3 中的基元字段数组
【发布时间】:2018-05-06 09:06:32
【问题描述】:

我们必须在 Realm 中存储具有字符串字段数组的元素。

为此,我们必须实施一些小变通方法:

class RealmString: Object {
    @objc dynamic var value = ""
    override init(value: Any) {
        super.init(value: [value])
    }
    required init(realm: RLMRealm, schema: RLMObjectSchema) {
        super.init(realm: realm, schema: schema)
    }
    required init() {
        super.init()
    }
    required init(value: Any, schema: RLMSchema) {
        super.init(value: [value], schema: schema)
    }
}

class Realm2Element: Object {
    let tags = List<RealmString>()
}

结果:

  1. CONTAINS ALL OF 条件如下所示:

ANY tags.value == "tag0" AND ANY tags.value == "tag1" AND ANY tags.value == "tag2"

  1. CONTAINS ANY OF 条件如下所示:

ANY tags.value IN {"tag0", "tag1", "tag2"}

Realm3 支持原语数组。我们从条件中删除了.value keyPath。但是在为Realm3Element 应用这些过滤器时出现错误:

class Realm3Element: Object {
    let tags = List<String>()
}

对于CONTAINS ALL OF条件:

'Invalid value', reason: 'Expected object of type (null) for property 'tags' on object of type 'Realm3Element', but received: tag0'

对于CONTAINS ANY OF条件:

'Expected object of type (null) in IN clause for property 'tags' on object of type 'Realm3Element', but received: tag0'

我们遍历了所有可能的变化,但找不到任何解决方案。

Realm3 是否支持按基元数组进行过滤?

【问题讨论】:

  • Does Realm3 support filtering by array of primitives field? 还没有,我希望它会在 3 个月前的某个时候出现,但不幸的是我看到这方面的进展为零。

标签: swift realm nspredicate


【解决方案1】:

您无法通过 Realm 使用 predicate 来实现您的目标,因为 Realm 使用 Predicates 有很多限制,但您可以使用这种方式作为解决方法

  let filterArray = ["tag0","tag1"]
    Array(realm.objects(Realm3Element.self)).filter({$0.tags.sorted().joined().contains(filterArray.sorted().joined())})

如果你想要一个完美的解决方案跟踪这个问题#5334

【讨论】:

  • 这个方法很慢
  • 你的数组中有多少元素?
  • Realm2Element 大约有十几个元素,每个 Realm2Element 大约有十几个 RealmString 元素
  • 好的,等我检查一下这个案例
  • @AlexBishop 我正在尝试2203 项目的代码编号,它工作顺利
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
相关资源
最近更新 更多