【发布时间】:2016-05-23 05:05:54
【问题描述】:
Channel 和 Messages 之间存在一对多关系,即一个频道可以有多个消息,而一个消息恰好属于一个频道。我想有效地获取最后一条消息以及频道。请注意,一个频道可能包含大量消息。我可以想到几个不同的选择:
- 在 Channel 上使消息成为有序关系并获取最后一条消息(在 Swift 中使用 messages.last)
潜在问题:根据我有限的经验,由于
NSOrderedSet不像 Set 那样支持泛型,因此可能涉及到一些强制转换。我还读到 Core Data、Xcode 和 Swift 中的有序关系组合通常有一些怪癖,所以不确定。 - 使消息在 Channel 上成为无序关系,并使用 Message 上的获取请求获取最后一条消息(按时间戳降序排序) 潜在问题:每次访问最后一条消息时都需要一个 fetch 请求,这可能是一个潜在的性能问题。
- 在 Channel 上添加一个名为 lastMessage 的附加一对一关系并始终保持更新。然后,使用单个 fetch 请求预取 lastMessage 关系以及 Channels。 潜在问题:确保 lastMessage 保持同步的附加代码。
为了进一步扩展这个问题,如果我想获取最后 n 条消息而不是最后一条消息,建议的方法是什么?
非常感谢!
【问题讨论】:
标签: ios swift core-data one-to-many