Swift 如何避免;包含数组属性的密钥路径必须使用聚合操作;查询领域时出现异常?

Swift 如何避免;包含数组属性的密钥路径必须使用聚合操作;查询领域时出现异常?,swift,realm,Swift,Realm,我有一个具有以下结构的领域对象数据库: class ItemModel: Object { dynamic var id: Int = 0 dynamic var catId: Int = 0 dynamic var subId: Int = 0 dynamic var itemName: String = "" dynamic var sortOrder: Int = 0 dynamic var favorite: Bool = false

我有一个具有以下结构的领域对象数据库:

class ItemModel: Object {
    dynamic var id: Int = 0
    dynamic var catId: Int = 0
    dynamic var subId: Int = 0
    dynamic var itemName: String = ""
    dynamic var sortOrder: Int = 0
    dynamic var favorite: Bool = false

    override static func primaryKey() -> String {
        return "id"
    }
}

class SubCategoryModel: Object {
    dynamic var id: Int = 0
    dynamic var catId: Int = 0
    dynamic var subCatName: String = ""
    dynamic var desc: String = ""
    dynamic var sortOrder: Int = 0
    let haveUnit = List<ItemModel>()

    override static func primaryKey() -> String {
        return "id"
    }
}

class CategoryModel: Object {
    dynamic var id: Int = 0
    dynamic var catName: String = ""
    dynamic var sortOrder: Int = 0

    override static func primaryKey() -> String {
        return "id"
    }
}
class ItemModel:对象{
动态变量id:Int=0
动态变量catId:Int=0
动态变量子ID:Int=0
动态变量itemName:String=“”
动态变量排序器:Int=0
动态变量收藏夹:Bool=false
重写静态func primaryKey()->String{
返回“id”
}
}
类子类别模型:对象{
动态变量id:Int=0
动态变量catId:Int=0
动态变量子类名称:String=“”
动态变量描述:字符串=“”
动态变量排序器:Int=0
设haveUnit=List()
重写静态func primaryKey()->String{
返回“id”
}
}
类CategoryModel:对象{
动态变量id:Int=0
动态变量catName:String=“”
动态变量排序器:Int=0
重写静态func primaryKey()->String{
返回“id”
}
}
要查询数据库,我使用以下代码:

var data = List<ItemModel>()
let index = indexPath.section
var query = "catId == \(inCategory)"
if (searchTextValue != "") {
    query += " AND itemName CONTAINS[c] \(searchTextValue)"
}
if index == 0 {
    let unitFavorite = DBManager.realm.objects(ItemModel.self).filter("\(query) AND favorite == true")
    data += unitFavorite
} else {
    var subquery = "catId == \(inCategory)"
    if (searchTextValue != "") {
        subquery += " AND ANY haveUnit.itemName CONTAINS[c] %@"
        let subCat = DBManager.realm.objects(SubCategoryModel.self).filter(subquery, searchTextValue).sorted(byKeyPath: "sortOrder", ascending: true)
        data += subCat[indexPath.section - 1].haveUnit
    } else {
        let subCat = DBManager.realm.objects(SubCategoryModel.self).filter(subquery).sorted(byKeyPath: "sortOrder", ascending: true)
        data += subCat[indexPath.section - 1].haveUnit
    }
}
var data=List()
让index=indexath.section
var query=“catId==\(分类)”
如果(searchTextValue!=“”){
查询+=“且itemName包含[c]\(searchTextValue)”
}
如果索引==0{
让unitFavorite=DBManager.realm.objects(ItemModel.self.filter)(“\(查询)和favorite==true”)
数据+=unitFavorite
}否则{
var subquery=“catId==\(分类)”
如果(searchTextValue!=“”){
子查询+=“和任何haveUnit.itemName包含[c]@”
让subCat=DBManager.realm.objects(SubCategoryModel.self).filter(子查询,searchTextValue).sorted(按关键字路径:“sortOrder”,升序:true)
数据+=subCat[indexPath.section-1].haveUnit
}否则{
让subCat=DBManager.realm.objects(subcategory.self).filter(subquery).sorted(按关键字路径:“sortOrder”,升序:true)
数据+=subCat[indexPath.section-1].haveUnit
}
}
运行此代码时,我总是看到以下异常:

由于未捕获异常“无效谓词”而终止应用程序,原因:“包含数组属性的密钥路径必须使用聚合操作”


您能否帮助我理解为什么会出现此异常,以及我可以做些什么来避免它?

您能否分享引发异常时传递给
filter
的最后一个谓词字符串?考虑到您用于构建谓词字符串的复杂逻辑,很难确定哪个代码路径被命中并生成异常。嘿@dodi,您有什么解决方案吗?当引发异常时,您能否共享传递给
过滤器
的最终谓词字符串?考虑到您用来构建谓词字符串的复杂逻辑,很难确定哪个代码路径被命中并生成异常。嘿@dodi,您有什么解决方案吗?