如何过滤我的数组以仅显示特定的类别项?

时间:2014-08-15 03:18:34

标签: nsmutablearray nsarray nspredicate

此代码目前列出了我的所有类别。但是,我想过滤此结果以显示特定结果。例如......该阵列包含牙买加,日本,德国和亚洲的项目。我想过滤显示的结果,只显示日本和德国。我读过NSPredicate可以帮助我,但我不太清楚如何在这里实现它。

Datacontroller.M

+(NSArray*) getCategories {

AppDelegate* delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSManagedObjectContext* context = delegate.managedObjectContext;

NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"StoreCategory" inManagedObjectContext:context];


NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"created_at" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];

[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

return fetchedObjects;
}

Categories.m

   -(UITableViewCell*)MGListView:(MGListView *)listView1 didCreateCell:(MGListCell *)cell indexPath:(NSIndexPath *)indexPath {

    if(cell != nil) {

    StoreCategory* cat = [listViewMain.arrayData objectAtIndex:indexPath.row];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor = [UIColor clearColor];

    [cell.labelTitle setText:cat.category];
    [self setImage:cat.category_icon imageView:cell.imgViewThumb];


}

return cell;
}

2 个答案:

答案 0 :(得分:0)

您无法在此方法中过滤不需要的类别,因为indexPath将是一系列索引。

在调用UITableView委托或调用DataSource函数之前,您必须构建另一个包含所需类别的数组,例如ViewDidLoad

答案 1 :(得分:0)

这种方法似乎可以解决问题。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category CONTAINS[cd] %@ OR category CONTAINS[cd] %@", @"Japan", @"Germany", context];
[fetchRequest setPredicate:predicate];