Учитывая NSSet
, который содержит объекты подкласса NSManagedObject
со строковым атрибутом name
, как я могу отсортировать набор по имени? Это где я использовал бы NSPredicate
?
Спасибо!
Учитывая NSSet
, который содержит объекты подкласса NSManagedObject
со строковым атрибутом name
, как я могу отсортировать набор по имени? Это где я использовал бы NSPredicate
?
Спасибо!
Нет, но вы должны использовать NSSortDescriptor
.
Вы должны использовать метод sortedArrayUsingDescriptors:
следующим образом:
NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sorted = [yourSet sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]];
Упомянув NSPredicate, мне кажется, что OP хочет сортировать набор как часть выполненной выборки. Имел ли он в виду это или нет, вот пример этого. Скажем, у вас есть много обратных отношений между сущностью Employee и подразделением, т.е. Отдел содержит много сотрудников. Учитывая, что вы уже получили отдел, зачислите сотрудников в отдел и отсортируйте их по имени:
Использование MagicalRecord:
Department *department = someFetchedDepartment;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@", department];
NSArray *sortedEmployees = [Employee MR_findAllSortedBy:@"firstName" ascending:YES withPredicate:predicate];
Без MagicalRecord:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *employeeEntity = [NSEntityDescription @"Employee" inManagedObjectContext:self.context];
[request setEntity:employeeEntity];
Department *department = someFetchedDepartment;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@", department];
[request setPredicate:predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:ascending];
[request setSortDescriptors:@[sortDescriptor]];
NSError *error = nil;
NSArray *sortedEmployees = [self.context executeFetchRequest:request error:&error];