Как отсортировать объект модели по объекту в словаре?

StackOverflow https://stackoverflow.com/questions/2014857

Вопрос

У меня есть объект модели, который простирается от 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top