Я получаю данные от Core Data
хранения с использованием NSFetchRequest
и храните эти данные в array
- все отлично работает. В качестве следующего шага, я хочу разобраться, что array
используя NSSortDescriptors
так:Блок NSComparator не называется
array = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) {
if ([[[array objectAtIndex:[obj2 integerValue]] valueForKey:@"lessImportantItems"] containsObject:[array objectAtIndex:[obj1 integerValue]]]) {
return (NSComparisonResult)NSOrderedAscending;
} else {
return (NSComparisonResult)NSOrderedDescending;
}
}],
[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO], nil]];
У меня есть проблема в том, что NSComparator
блок во втором NSSortDescriptor
не называется (я пытался NSLog
). Чтобы дать некоторый фон для моей структуры данных, вот соответствующий Core Data
объектный граф раздела:
Что приложение делает это сравнивает элементы друг с другом. В качестве первого шага победитель в парном сравнении получает приращение score
. Но также я отмечаю спаренный приоритет, т. Е. Добавляю отношение «один ко многим» lessImportantItems
от победителя к проигравшему. Итак, в моем массиве я сначала пытаюсь сортировать по score
, а затем, когда score
s равны, я также пытаюсь сортировать по парному приоритету.
Возможно, это потому, что я использую score
в качестве компаратора key
два раза подряд? Но, с другой стороны, NSComparator
не позволяет передавать relationship
как key
.
Я, похоже, не могу взломать этот. У кого-нибудь есть идеи? Или, может быть, я должен придерживаться другого подхода к сортировке?
Итак, конечный результат, который вы хотите, - это сортировка предметов? В любом методе? Или ваш вариант? – geekchic
Ну, это как он говорит с дескрипторами сортировки: (1) сортировать по счету, затем (2), если оценка равна, сортировать по более важному один на один и, наконец, (3) сортировать по дате, созданной (реалистично будет для элементов в хвосте, то есть те, которые имеют одинаковую оценку 0 - еще не сравнили). Это то, о чем вы спрашивали? – artooras