5

我有两个像这样的领域数据模型类:

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")
4

2 回答 2

5

另一种解决方法是:

在 中引入taskCount属性TaskList,并使 和 始终taskCount同步tasks.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()
        }
    }
}
于 2015-10-24T16:55:00.263 回答
4

像这样:

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

编辑:对领域一无所知,这仅在objects返回 aCollectionTypeList具有count属性时才有效。

于 2015-10-24T16:17:57.600 回答