Как отсортировать объект модели по объекту в словаре?
-
19-09-2019 - |
Вопрос
У меня есть объект модели, который простирается от NSObject под названием column .Столбец содержит два поля: свойства и данные.Properties - это NSDictionary, который хранит произвольные пары ключ / значение, в то время как data представляет собой массив.
Столбцы представлены в виде массивов, и мне нужно отсортировать их по значению, которое, я знаю, всегда будет в свойствах, значению с ключом ordinal_position .
Я использую следующий код для сортировки, но это всегда приводит к сбою, потому что в объекте модели нет "ordinal_position", только в свойствах объекта модели:
NSArray *unsortedArray = [resultStore allValues];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ordinal_position" ascending:YES] autorelease];
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
Как я могу сказать NSSortDescriptor, чтобы он искал свойство в словаре объекта модели?
Решение
Вы должны определить свой собственный селектор, который возвращает Результат NSComparisonResult и реализовать это:
- (NSComparisonResult)compareByProperty:(Column *)aColumn {
id thisValue = [self valueForKey:@"ordinal_position"];
id otherValue = [self valueForKey:@"ordinal_position"];
return [thisValue compare:otherValue]; // Replace to suit your logic
}
Затем используйте метод NSArray sortedArrayUsingSelector:
:
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compareByProperty:)];
Обратите внимание, что ваш метод сравнения должен существовать для вашего объекта модели, а не для класса, из которого вы это вызываете - идиома заключается в том, что вы сравниваете некоторый данный объект модели (self
) к другому объекту модели (aColumn
) изнутри первого объекта.
Другие советы
Используйте ключевой путь:
@"MyDictionary.ordinal_position"Мой словарь.ordinal_position