gpt4 book ai didi

ios - 在子查询内排序

转载 作者:可可西里 更新时间:2023-11-01 02:08:30 26 4
gpt4 key购买 nike

我有两个名为 ChatChatMessage 的 Realm 对象。两者之间是一对多的关系。

class Chat: Object {
dynamic var id: String = ""
dynamic var createdAt: Date = Date()
dynamic var creatorId: String = ""
let chatMessages = List<ChatMessage>()

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

class ChatMessage: Object {
dynamic var id: String = ""
dynamic var chatId: String = ""
dynamic var createdAt: Date = Date()
dynamic var read: Bool = false
dynamic var authorId: String = ""
dynamic var text: String = ""
let chat = LinkingObjects(fromType: Chat.self, property: "chatMessages").first

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

我需要显示一个聊天列表,其中带有最新消息的聊天位于顶部。就像在所有聊天应用程序中一样。为此,我想我需要根据链接到每个聊天的 ChatMessage 对象的 createdAt 属性值对 Chat 对象进行排序。

这就是我目前所拥有的。

func getChats() -> Results<Chat> {
let realm = try! Realm()
let chats = realm.objects(Chat.self)
let predicate = NSPredicate(format: "SUBQUERY(Chat, $chat, $chat.chatMessages)", argumentArray: nil)
return chats.filter(predicate)
}

我不知道如何对子查询中的 chatMessages 进行排序。或者如果这可能的话。搜索 Realm 文档但找不到任何东西。任何帮助表示赞赏。或者如果有更好的方法来解决这个问题,请提出任何建议。

最佳答案

filter 查询用于隔离特定对象,而不是对它们进行实际排序。因此,尝试在 NSPredicate 中进行排序并不可行。

现在在 Realm GitHub 中跟踪了一个问题 allowing sorting via to-many child objects .这在理论上最终意味着你可以简单地做:

let chats = realm.objects(Chat.self).sorted(byKeyPath: "chatMessages.createdAt")

我绝对鼓励您为该问题添加 +1,以便提高其优先级。 :)

与此同时,虽然这不是一个绝对令人惊奇的解决方案,但您可以向 Chat 添加一个额外的 Date 属性,它只是复制的 lastUpdated最新的 ChatMessage 对象的日期。这样您就可以直接用它对 Chat 对象进行排序。

关于ios - 在子查询内排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com