有人知道如何使用nssortDescriptors做嵌套的排序(不确定这是最好的术语)?
我正在使用nssortDescriptor来获取nsmanagedObject。
我有一个名为"对话"的nsmanagebject,它与消息有一对一的关系。每次对话都有一定的消息。
每条消息都有一个时间到期日期属性。我试图通过各自的最新消息的时间来对话
重述:我正在尝试通过每个对话中的最后一次时间来查找消息,然后通过各自的最新消息对对话进行分类。消息和对话是nsmanagedObject。
这些描述符的关键字符串性质使我真的很难找出。
我在上面看到了一些东西,所以建议这样的东西:nssortDescriptor * sortbyDate = [nssortDescriptor sortdescriptorwithkey:@messages。
但我只是崩溃:
*** 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
中。然后告诉您提取的结果控制器对此进行排序。