该死的短标题!:p页
基本上,我有一个名为“线程”的实体和一个名为“消息”的实体。我有一个一对多的关系从线程->>消息(和一对一的反向关系)。
我需要做的是从线程实体获取所有的记录,对于每一个,我需要得到最新的时间戳的消息(这只是“LaSTOpDebug”属性中的int值,所以我猜最高的数字就足够了)。
我不知道你还需要什么信息,这是我的实体的截图:
我确信一定有比遍历所有记录并比较threadid更好的方法吗?
谢谢您。

最佳答案

一旦有了单独的线程对象,您只需要对消息对象进行排序,并获取最上面的消息对象。
最简单的解决方案是在thread类中创建一个方法,如下所示:

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

然后,您只需向每个线程对象请求其LastUpdatedMessage。
一个更复杂但更有效的解决方案是创建一个中间链接实体,该实体将一个消息对象链接到一个线程对象,并在消息对象更新时设置该链接对象。所以:
MessageThreadLink{
    message<--(required)-->Message.lastUpdateLink
    thread<--(required)-->Thread.lastUpdatedMessage
}

每当消息对象更新时,它会告诉它的相关线程对象删除现有的链接对象并创建另一个指向它的链接对象。您可能会将该代码放入LastUpdated属性的自定义setter中。
使用此方法,您只需向每个线程请求其LastUpdatedMessage,它就会自动出现,而无需进行大量搜索和排序。

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

10-11 14:50