NSSortDescriptor имеет метод sortDescriptorWithKey:ascending:selector:
.
Это берет сортируемый объект, находит свойство Key-Value Coding объекта для key
, а затем отправляет это свойство указанному селектору.
Вместо этого я хотел бы отправить сам объект селектор, чтобы напрямую отсортировать объект одним из его методов.
Я попробовал ключ @"self"
, который не работает со следующей ошибкой:
[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES selector:@selector(compare:)];
'NSInvalidArgumentException', причина: 'keypath #self не найден в объекте
Есть ли способ сортировки с использованием одного из методов объекта, а не одного из свойств?
(Кстати, я не могу использовать sortDescriptorWithKey:ascending:comparator:
из-за Core Data. Это также будет использоваться с NSFetchedResultsController
и делегатом.)
РЕДАКТИРОВАТЬ:
Полный код того, что я хотел бы сделать, с Core Data + NSFetchRequest:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"MYClass" inManagedObjectContext:ManagedObjectContext]];
[request setFetchBatchSize:20];
// This is where I am having the problem. Self?
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES selector:@selector(compare:)];
[request setSortDescriptors:@[sortDescriptor]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hidden != %@", @YES];
[request setPredicate:predicate];
NSFetchedResultsController *newController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[[ATBackend sharedBackend] managedObjectContext] sectionNameKeyPath:@"sectionKeyPath" cacheName:@"myCache"];
newController.delegate = self;
_fetchedMessagesController = newController;
compare:
? Если нет, пытались ли вы передать его селектор конструктору дескриптора сортировки? Что вы имеете в виду, когда говорите, что@"self"
не работает? Что именно происходит и чем это отличается от того, что вы хотите? - person Ken Thomases   schedule 11.08.2015NSSortDescriptor
(должен по сути соответствоватьcompare:
). Но проблема, с которой я сталкиваюсь, заключается в объекте, которому я отправляю селектор, а не в самом селекторе. Хотите отправить наobject
, можете отправить только наobject.property
. - person pkamb   schedule 11.08.2015@"self"
и@selector(yourComparisonMethod:)
. Он работает в основном с дескрипторами сортировки. Может быть проблема с Core Data, но ее невозможно понять, пока вы не объясните, что происходит. - person Ken Thomases   schedule 11.08.2015