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