Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 子查询内的排序_Ios_Swift_Sorting_Subquery_Realm - Fatal编程技术网

Ios 子查询内的排序

Ios 子查询内的排序,ios,swift,sorting,subquery,realm,Ios,Swift,Sorting,Subquery,Realm,我有两个领域对象称为Chat和ChatMessage。两者之间存在一对多的关系 class Chat: Object { dynamic var id: String = "" dynamic var createdAt: Date = Date() dynamic var creatorId: String = "" let chatMessages = List<ChatMessage>() override static func pr

我有两个领域对象称为
Chat
ChatMessage
。两者之间存在一对多的关系

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"
    }
}

我不知道如何对子查询中的
chatMessages
进行排序。如果可能的话。搜索了领域文档,但找不到任何内容。感谢您的帮助。如果有更好的方法,也可以提供任何建议。

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

GitHub领域目前正在跟踪一个问题。这在理论上最终意味着你可以简单地做到:

let chats=realm.objects(Chat.self).排序(按KeyPath:“chatMessages.createdAt”)

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


与此同时,虽然不是一个绝对令人惊奇的解决方案,但您可以向
聊天
添加一个附加的
日期
属性,该属性只是
最新更新的
,用于复制最新的
聊天消息
对象的日期。这样你就可以直接用它对聊天对象进行排序。

谢谢你的回复。是的,我已经遇到了Github的问题,并对其进行了投票:)我想我会采用建议的解决方案。顺便问一下,域中是否有一种方法可以使
Chat
中新添加的
Date
属性在添加新的
ChatMessage
对象时自动更新?还是我必须手动设置?@Isuru我很乐意!酷!谢谢你!六羟甲基三聚氰胺六甲醚。。。每当更新
chatMessages
属性时,您可以使用领域通知系统触发警报,但这可能有点笨拙。最简单的方法可能是为名为
addMessage()
Chat
添加一个方便的方法,该方法既可以将新消息添加到
列表中,也可以更新
lastUpdated
属性:@TiM参加聚会迟到了,但在尝试通过LinkingObjects/hasMany
Date
属性进行排序时才意识到这是不可能的,当它出现在我的关键路径上时,我感到惊讶。在父级上使用这种类型的“缓存列”仍然是最好的路由吗?当然,这听起来比我看到的很多例子都要好,比如人们指责和强迫返回数组,这会破坏整个PointOrry@RyanRomanchuk,我不再在Realm工作了,我也没有跟上它的最新改进,所以我真的不知道。我链接的那个问题自2017年以来就没有更新过,所以我最好的猜测是答案是“是的,这可能仍然是最好的方式”。如果您想要更正式的答案,最好在GitHub问题或领域支持论坛上提问。祝你好运
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)
}