gpt4 book ai didi

iphone - CoreData - 从一对多关系中选择特定条目

转载 作者:搜寻专家 更新时间:2023-10-30 20:12:33 25 4
gpt4 key购买 nike

该死的短标题! :p

基本上我有一个名为“threads”的实体和一个名为“messages”的实体。我与线程 -> 消息之间存在一对多关系(以及一对一反向关系)。

我需要做的是从线程实体获取所有记录,对于每一个我需要获取带有最新时间戳的消息(这只是“lastUpdated”属性中的一个整数,所以我猜的最大数字就足够了)。

我不确定您还需要什么其他信息,这是我的实体的屏幕截图:

alt text

我敢肯定,一定有比遍历所有记录并比较 threadId 更好的方法吗?

谢谢。

最佳答案

一旦您拥有单独的 Thread 对象,您只需对 Messages 对象进行排序并获取最顶层的 Message 对象。

最简单的解决方案是在 Thread 类中创建一个方法,如下所示:

- (Messages *) lastUpdatedMessage{
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"lastUpdated" ascending:NO];
NSArray *sortedMessages=[self.messagesInThread sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
return [sortedMessages objectAtIndex:0];
}

然后您所要做的就是向每个 Thread 对象询问其 lastUpdatedMessage。

一种更复杂但更有效的解决方案是创建一个中间链接实体,它将一个消息对象链接到一个线程对象,并在消息对象更新时设置该链接对象。所以:

MessageThreadLink{
message<--(required)-->Message.lastUpdateLink
thread<--(required)-->Thread.lastUpdatedMessage
}

每当一个 Message 对象更新时,它会告诉它相关的 Thread 对象删除现有的链接对象并创建另一个指向它的链接对象。您可能会将该代码放在 lastUpdated 属性的自定义 setter 中。

使用此方法,您只需向每个线程询问其 lastUpdatedMessage,它会自动出现,无需大量搜索和排序。

关于iphone - CoreData - 从一对多关系中选择特定条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4322994/

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