领域按日期列出日期列表中的对象

时间:2017-06-25 19:01:47

标签: swift realm

所以我有以下对象

class Chat: Object {
    dynamic var chatID = ""
    var participants = List<Friend>()
    var messages = List<Message>()

    /// Set the primary key
    override static func primaryKey() -> String? {
        return "chatID"
    }
}

class Message: Object {
    dynamic var chat: Chat!
    dynamic var from: Friend!
    dynamic var message = ""
    dynamic var date = Date()
    dynamic var isRead: Bool = false
}

现在我获取已创建的所有聊天的列表。当我有聊天时,我希望能够根据最后一条消息对它们进行排序。所以我需要做的是按照消息列表中的日期排序聊天列表。

包含最新日期消息的聊天需要在顶部开启,依此类推。

我试图按如下方式订购清单 realmManager.chatResults.sorted(byKeyPath: "messages.date", ascending: false)但会引发以下错误

  

由于未捕获的异常终止应用&#39;排序&#39;的密钥路径无效,   原因:&#39;无法排序&#39; messages.date&#39;:在关键路径上排序   不支持包括多对多关系。&#39;

我目前无法弄清楚如何解决这个问题。有人知道如何实现正确的排序行为吗?

1 个答案:

答案 0 :(得分:4)

您正尝试访问列表中单个实例的属性,尤其是您尝试根据单个# Error: line 1: name 'BBUIcommands' is not defined # Traceback (most recent call last): # File "<maya console>", line 1, in <module> # File "C:/Users/censored/Documents/maya/2017/scripts\BuddySuite.py", line 21, in <module> # import suite_modules # File "C:/Users/censored/Documents/maya/2017/scripts\suite_modules.py", line 22, in <module> # class SuiteUIcommands(): # File "C:/Users/censored/Documents/maya/2017/scripts\suite_modules.py", line 31, in SuiteUIcommands # import bb_modules # File "C:/Users/censored/Documents/maya/2017/scripts\bb_modules.py", line 13, in <module> # class BBbatchCommands: # File "C:/Users/censored/Documents/maya/2017/scripts\bb_modules.py", line 16, in BBbatchCommands # BBUI = BBUIcommands() # NameError: name 'BBUIcommands' is not defined #` 实例的属性对List<Message>集合进行排序。

如果要对Message个实例进行排序,首先必须对Chat进行排序,然后按最后一条消息排序。为了缓解这个错误,你可以使用Swift内置的Chat.messages函数和Realm函数。

sorted

代码已在操场上进行了测试,并按照最新let sortedChats = realm.objects(Chat.self).sorted{ guard let currentLatestDate = $0.messages.sorted(byKeyPath: "date",ascending: false).first?.date, let nextLatestDate = $1.messages.sorted(byKeyPath: "date",ascending: false).first?.date else {return false} return currentLatestDate > nextLatestDate } 的日期降序排列Chat Realm个实例。