Как отсортировать объект модели по объекту в словаре? - PullRequest
0 голосов
/ 06 января 2010

У меня есть объект модели, который выходит из NSObject и называется столбцом. Столбец имеет два поля, свойства и данные. Свойства - это NSDictionary, в котором хранятся произвольные пары ключ / значение, а данные - это массив.

Столбцы входят в массивы, и мне нужно отсортировать их по значению, которое, как я знаю, всегда будет в свойствах, по значению с ключом 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 искать свойство в словаре в объекте модели?

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Вы должны определить свой собственный селектор, который возвращает 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) с другим объектом модели (* 1013) *) изнутри первого объекта.

0 голосов
/ 06 января 2010

Использовать ключевой путь:

@ "myDictionary.ordinal_position"

...