1

我有一个包含 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;
}
4

1 回答 1

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];

正如您所说,这将起作用,这两个对象都具有类型键。

于 2012-11-25T05:48:31.380 回答