NSSortDescriptor and NSPredicate for sorting and filtering
我有一个tableView,它具有5个可能的数据源,具体取决于标志对象
分配数据源后,我需要能够通过
用户可以"检查"多种流派,这些流派基本上应根据选择的流派来切换曲目的显示。我正在考虑在
如何使用流派字典设置
这是实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | - (void)assignDataSource { switch (dataSourceAssignment.intValue) { case 0: dataSource = [NSMutableArray arrayWithArray:tracksArray]; break; case 1: dataSource = [NSMutableArray arrayWithArray:favoriteTracks]; break; case 2: dataSource = [NSMutableArray arrayWithArray:topTracksOfTheWeek]; break; case 3: dataSource = [NSMutableArray arrayWithArray:topTracksOfTheMonth]; break; case 4: dataSource = [NSMutableArray arrayWithArray:topTracksOfTheYear]; break; default: break; } if (dataSourceAssignment.intValue >= 2) { NSSortDescriptor *avgRatingSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"confidenceRating" ascending:NO]; NSArray *sortDescriptors = [NSArray arrayWithObjects:avgRatingSortDescriptor, nil]; NSArray *sortedArray = [dataSource sortedArrayUsingDescriptors:sortDescriptors]; dataSource = [NSMutableArray arrayWithArray:sortedArray]; } |
您可以将哪些类型的音乐存储到数组中,然后使用谓词。
您还可以在用户选择/取消选择元素时删除/添加元素。
1 2 3 4 | NSArray *selectedGenresByUser = [NSArray arrayWithObjects:@"genre1",@"genre2", nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat: @"genre in $SELECTED_GENRES"]; predicate = [predicate predicateWithSubstitutionVariables:[NSDictionary dictionaryWithObject:[NSArray arrayWithArray:selectedGenresByUser] forKey:@"SELECTED_GENRES"]]; //then use predicate to filter datasource array( maby you can store all elements in one array) |
使用
例如,您可以具有: