我有两个这样的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")
答案 0 :(得分: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目前不支持对关键路径进行排序。
如果您想自动同步taskCount
和tasks.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
返回CollectionType
且List
具有count
属性时才有效。