Core data 取数时对核心数据进行多次排序

Core data 取数时对核心数据进行多次排序,core-data,Core Data,我有一个多对多(many-to-many),并希望对其进行排序,以便(Event)title是下面列出相关(Person)姓名的keyPath,包括在这种情况下的重复项。像这样的 NSSortDescriptor *eventSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"event.name"

我有一个多对多(many-to-many),并希望对其进行排序,以便(Event)title是下面列出相关(Person)姓名的keyPath,包括在这种情况下的重复项。像这样的

NSSortDescriptor *eventSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"event.name" 
                                                                     ascending:ascending 
                                                                      selector:@selector(caseInsensitiveCompare:)];

NSSortDescriptor *personSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                                                    ascending:ascending 
                                                                     selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:eventSortDescriptor, personSortDescriptor, nil];


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" 
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                                                            managedObjectContext:self.managedObjectContext 
                                                                                              sectionNameKeyPath:@"event.name"
                                                                                                       cacheName:cacheName];
数据模型说明
事件-人,反向关系是“事件”和“人”,每个都有一个属性eventTitle和personName

事件标题1
人名a
人名b
事件标题2
人名a
人名


我曾使用to-one获取请求,并使用sortDescriptors在keyPath上进行排序。对于许多人来说,需要做哪些不同的事情才能以这种方式工作。这些信息够了吗?首先,非常感谢您提供的任何/所有帮助。

我将获得获取请求以获取“Person”实体,然后按事件排序Person。有点像这样

NSSortDescriptor *eventSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"event.name" 
                                                                     ascending:ascending 
                                                                      selector:@selector(caseInsensitiveCompare:)];

NSSortDescriptor *personSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                                                    ascending:ascending 
                                                                     selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:eventSortDescriptor, personSortDescriptor, nil];


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" 
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                                                            managedObjectContext:self.managedObjectContext 
                                                                                              sectionNameKeyPath:@"event.name"
                                                                                                       cacheName:cacheName];

我将获取获取请求以获取“Person”实体,然后按事件排序Person。有点像这样

NSSortDescriptor *eventSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"event.name" 
                                                                     ascending:ascending 
                                                                      selector:@selector(caseInsensitiveCompare:)];

NSSortDescriptor *personSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                                                    ascending:ascending 
                                                                     selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:eventSortDescriptor, personSortDescriptor, nil];


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" 
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                                                                            managedObjectContext:self.managedObjectContext 
                                                                                              sectionNameKeyPath:@"event.name"
                                                                                                       cacheName:cacheName];

如果我理解正确,您希望获取“事件”实体并根据它们的eventTitle属性对它们进行排序。因此,您应该为这些实体设置排序描述符,就像为to-one抓取设置排序描述符一样,因为eventTitle是一个to-one属性。然后通过检索到的“事件”实体访问“人物”实体。那不行?谢谢你,维恩克!是的,这正是我想要使用提供的表视图方法进行显示的目的。我不知道如何在frc内完成最后一部分,我一直在尝试一些事情,但这对我不起作用。你能给我多一点吗?如果我理解正确,你想获取“事件”实体并根据它们的eventTitle属性对它们进行排序。因此,您应该为这些实体设置排序描述符,就像为to-one抓取设置排序描述符一样,因为eventTitle是一个to-one属性。然后通过检索到的“事件”实体访问“人物”实体。那不行?谢谢你,维恩克!是的,这正是我想要使用提供的表视图方法进行显示的目的。我不知道如何在frc内完成最后一部分,我一直在尝试一些事情,但这对我不起作用。你能再给我一点吗?我给了你正确的答案。我忘了NSFetchRequest可以让您同时在多个级别上进行排序--这就是为什么它需要一个排序描述符数组而不是一个。我忘记了NSFetchRequest可以让您同时在多个级别上排序——这就是为什么它需要一个排序描述符数组而不是一个。