0

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

4

2 回答 2

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) 进行比较。

于 2010-01-06T17:39:43.490 回答
0

使用 keyPath:

@"myDictionary.ordinal_position"

于 2010-01-06T17:41:40.117 回答