我有一个 tableView,它有 5 个不同的可能数据源,具体取决于标志对象(NSNumber *)dataSourceAssignment
。我已经实现了一个NSSortDescriptor
按.dataSource
(float)confidenceRating
分配数据源后,我需要能够通过(NSString *)genre
. 我了解如何使用来过滤我的数组,但是当有 5-6 个不同的字符串可以检查NSPredicate
时,我无法弄清楚如何有效地做到这一点。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];
}