我有一個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];
}