如何在字典中按对象对模型对象进行排序?

时间:2010-01-06 17:27:32

标签: objective-c cocoa nssortdescriptor

我有一个从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在模型对象的字典中查找属性?

2 个答案:

答案 0 :(得分:2)

您应该定义自己的选择器,返回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)来自第一个对象。

答案 1 :(得分:0)

使用keyPath:

@ “myDictionary.ordinal_position”