我有一个tableView有5个不同的可能的数据源,取决于标志对象(NSNumber *)dataSourceAssignment
。我实施了NSSortDescriptor
,将dataSource
排序为(float)confidenceRating
。NSSortDescriptor和NSPredicate进行排序和过滤
数据源被分配后,我需要能够通过(NSString *)genre
过滤数据源数组。我知道如何使用NSPredicate
来过滤我的数组,但我不知道如何有效地做到这一点,当有5-6个不同的genre
字符串可以检查。
用户能够“检查”多种流派,基本上应根据选择的流派切换曲目的显示。我正在考虑在NSUserDefaults *defaults
中创建一个字典,如下所示:["genre1" = YES, "genre2" = NO, "genre3" = YES ...]
。
如何设置NSPredicate
以使用类型字典过滤数据源,而不使用带有条件负载的巨大if/switch语句。
这里是我有一个NSPredicate
实施前的代码:
- (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];
}