gpt4 book ai didi

ios - 如何在 NSManagedObject iOS 上进行嵌套排序

转载 作者:行者123 更新时间:2023-11-28 20:07:55 30 4
gpt4 key购买 nike

有谁知道如何使用 NSSortDescriptors 进行嵌套排序(不确定这是否是最好的术语)?

我正在使用 NSSortDescriptors 来获取 NSManagedObjects。

我有一个名为 Conversation 的 NSManagedObject,它与消息具有一对多关系。每个对话都有一个 NSSet 消息。

每条消息都有一个 timeReceived Date 属性。我正在尝试按各自最新消息的接收时间对我的对话进行排序

重申一下:我正在尝试在每个对话中找到最后一次接收到的消息,然后根据各自的最新消息对对话进行排序。消息和对话是 NSManagedObjects。

这些描述符的关键字符串性质让我真的很难理解。

我在 SO 上看到了类似这样的内容:NSSortDescriptor * sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"messages.@min.timeReceived"ascending:NO];

但我只是崩溃了:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Keypath containing KVC aggregate where there shouldn't be one; failed to handle messages.@max.timeReceived'

你们有没有人做过这样的事情?

- (NSFetchedResultsController *) fetchSortedConversations
{
NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"latestMessage.timeReceived" ascending:NO];

// I implemented a workaround where I set a latestMessage for each Conversation somewhere else, but I'd like to be able to sort the Conversations without having to manually manage the latest message.

NSArray * sortDescriptors = @[sortByDate];

NSFetchedResultsController * conversations = [self.coreDataManager fetchEntitiesWithName: NSStringFromClass([Conversation class]) sortDescriptors:sortDescriptors sectionNameKeyPath:nil predicate:nil];


return conversations;
}

最佳答案

我假设您面临的问题不能用当前制定的 NSFetchedResultsController 来解决,因为它不能真正用 SQL 巧妙地解决。所以 NSFetchRequest 可能只是拒绝这样做,然后向上冒泡。

最简单的解决方案是在您为Conversation 获得的托管对象子类上实现- willSave 并在其中找到@max.timeReceived 并将其直接存储到 Conversation 中的属性。然后告诉您的获取结果 Controller 对其进行排序。

关于ios - 如何在 NSManagedObject iOS 上进行嵌套排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394679/

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