所以我有以下对象
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;
我目前无法弄清楚如何解决这个问题。有人知道如何实现正确的排序行为吗?
答案 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
个实例。