我有一个包含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;
}
答案 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];
这将起作用,因为你说两个对象都有类型键。