フラグオブジェクトに応じて、5 つの異なるデータソースを持つ tableView があります(NSNumber *)dataSourceAssignment
。NSSortDescriptor
でソートするを実装しましdataSource
た(float)confidenceRating
。
データソースが割り当てられたら、dataSource 配列を(NSString *)genre
. 配列をフィルタリングする方法は理解していますが、チェックできる文字列NSPredicate
が 5 ~ 6 個ある場合に効率的に行う方法がわかりません。genre
ユーザーは複数のジャンルを「チェック」することができ、基本的にどのジャンルが選択されているかに従ってトラックの表示を切り替える必要があります。NSUserDefaults *defaults
次のような辞書を作成することを考えていました: ["genre1" = YES, "genre2" = NO, "genre3" = YES ...]
.
NSPredicate
大量の条件を含む巨大な if/switch ステートメントを使用せずに、ジャンル辞書を使用してデータソースをフィルタリングするように設定するにはどうすればよいですか。
NSPredicate
aが実装される前に私が持っているコードは次のとおりです。
- (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];
}