【问题标题】:Realm not query string field with whitespace领域不使用空格查询字符串字段
【发布时间】:2017-08-22 19:33:21
【问题描述】:

我的数据源中有这样的功能:

func getAllFood(by type: String) -> [UserFoodInformation] {
    var findedFood = [UserFoodInformation]()
    findedFood.append(contentsOf: baseUserFoodDataSource.getAllFood(by: type))
    let predicate = NSPredicate(format: "foodType == %@", type)
    let resultOfSearching = dataBase.objects(AddedUserFood.self).filter(predicate).sorted(byKeyPath: "name")
    for searchedFood in resultOfSearching {
        findedFood.append(searchedFood)
    }
    return findedFood
}

当我尝试使用包含空格的字符串进行查询时,我没有任何结果,但是如果我使用简单的单字参数进行查询,一切都很好。这是为什么?我可以在 Realm 中有一个包含多个单词的字符串字段吗?

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    您使用的谓词正在查找其foodType 属性等于传入的type 字符串的对象。只有那些属性与该字符串完全相等的对象才会匹配。如果要执行某种其他形式的匹配,则需要使用除相等运算符之外的其他内容。 BEGINSWITHCONTAINSENDSWITHLIKE 是 Realm 在字符串字段上支持的比较运算符。

    我可以在 Realm 中有一个包含多个单词的字符串字段吗?

    字符串字段可以包含任何字符串值。但是,受支持的比较运算符没有“单词”的概念,因此如果您想使用该概念进行过滤,您可能需要做进一步的工作。根据您的用例,我可以看到几种方法:

    • 使用CONTAINS 查找其foodType 属性包含给定type 字符串的任何对象。

    • 将字符串解析为存储在模型中的结构化数据。例如,为foodType 属性存储List<FoodType> 而不是String 可能更有意义。

    可能还有其他选项,但它们取决于您想要实现的目标的详细信息,但您尚未分享。

    【讨论】:

    • 谢谢,但我的问题更简单:由于某种原因,有一次我的模型在过滤参数上返回 0 结果,其中包含自己的空格,但在恢复到我之前的提交后一切正常。似乎这是我在搜索的某些部分的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多