使用List属性的计数对Realm对象进行排序

时间:2015-10-24 16:00:23

标签: ios swift realm realm-list

我有两个这样的Realm数据模型类:

class TaskList: Object {

   dynamic var name = ""
   dynamic var createdAt = NSDate()
   let tasks = List<Task>()
}

class Task: Object {

   dynamic var name = ""
   dynamic var createdAt = NSDate()
   dynamic var notes = ""
   dynamic var isCompleted = false
}

现在我需要查询TaskList并对每个任务中的任务数量进行排序。我尝试使用类似的东西,但它崩溃了应用程序,因为它不受支持:

realm.objects(TaskList).sorted("tasks.count")

2 个答案:

答案 0 :(得分:5)

另一种解决方法是:

taskCount中引入TaskList属性,并始终同步taskCounttasks.count

class TaskList: Object {
    dynamic var name = ""
    dynamic var createdAt = NSDate()
    let tasks = List<Task>()
    dynamic var taskCount = 0
}

然后,您可以使用

realm.objects(TaskList).sorted("taskCount")

由于Realm目前不支持对关键路径进行排序。

如果您想自动同步taskCounttasks.count,可以执行以下操作:

(请勿直接使用tasks.append(),而是使用addTask()方法。)

class TaskList: Object {
    dynamic var name = ""
    dynamic var createdAt = NSDate()
    private let tasks = List<Task>()
    dynamic var taskCount = 0

    func addTask(task: Task) {
        func add() {
            tasks.append(task)
            taskCount = tasks.count
        }
        if let realm = realm where !realm.inWriteTransaction {
            try! realm.write{
                add()
            }
        } else {
            add()
        }
    }
}

答案 1 :(得分:4)

像这样:

realm.objects(TaskList).sort { $0.tasks.count < $1.tasks.count }

编辑:不了解Realm,这仅在objects返回CollectionTypeList具有count属性时才有效。