- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有谁知道如何使用 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/
我是一名优秀的程序员,十分优秀!