使用NSSortDescriptor无法获得正确的排序

时间:2012-11-25 04:58:01

标签: objective-c ios nssortdescriptor

我有一个包含2个对象的数组。每个对象都有一个“类型”键。该键的一个值是“resource”,另一个是“crop”。

我想对该数组进行排序并创建一个新数组,该数组只包含我需要的类型的对象。我以为这段代码做到了......

-(NSArray*)getItemsOfType:(NSString *) type
{
    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:type
                                                 ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [templateObjects sortedArrayUsingDescriptors:sortDescriptors];

    return sortedArray;
}

但似乎所做的只是将当前数组排序为某种顺序。如何更改该功能以满足我的需求?所以我需要使用“initWithKey:ascending:selector:”?

更新

我刚刚在上面的代码上面尝试了这段代码......

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"templateObjects.type like %@", type];

    NSArray *newArray = [templateObjects filteredArrayUsingPredicate:predicate];

但是newArray看起来似乎是空的?我有一种感觉@“templateObjects.type”部分是错误的?

更新2

好的,这段代码可以满足我的需要..

-(NSArray*)getItemsOfType:(NSString *) type
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type CONTAINS[cd] %@", type];

    NSArray *newArray = [templateObjects filteredArrayUsingPredicate:predicate];

    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[NSSortDescriptor alloc] initWithKey:type
                                                 ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [newArray sortedArrayUsingDescriptors:sortDescriptors];

    return sortedArray;
}

1 个答案:

答案 0 :(得分:0)

使用

[NSPredicate predicateWithFormat: @"type like %@", type];

而不是

[NSPredicate predicateWithFormat: @"templateObjects.type like %@", type];

所以

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"type like %@", type];

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"type CONTAINS[cd] %@", type];

这将起作用,因为你说两个对象都有类型键。