name、pic、dayなどのプロパティを含む配列内に辞書があります(dayはからの文字列ですpicker view
)。
毎週のテーブルビューを表示し、日ごとにアイテムを整理したいと思います。
私が計画しているのは、毎日新しい配列を作成し、すべてのデータをそれらの配列にフィルターしてから、セクションにデータを入力することです。それを行うためのより賢い方法はありますか?
numberOfRowsInSection
最初にデータをフィルタリングしないと、別の方法で取得することはできません。
name、pic、dayなどのプロパティを含む配列内に辞書があります(dayはからの文字列ですpicker view
)。
毎週のテーブルビューを表示し、日ごとにアイテムを整理したいと思います。
私が計画しているのは、毎日新しい配列を作成し、すべてのデータをそれらの配列にフィルターしてから、セクションにデータを入力することです。それを行うためのより賢い方法はありますか?
numberOfRowsInSection
最初にデータをフィルタリングしないと、別の方法で取得することはできません。
これを行うもう1つの方法は、の値を返す必要があるたびに、ライブの辞書の配列をフィルタリングすることです-tableView:numberOfRowsInSection:
。するでしょう
これを行うための一部のコード(コンパイルされていない、テストされていない)は次のようになります。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString *day = [self _dayForTableViewSection:section]; // assuming this exists
NSPredicate *filter = [NSPredicate predicateWithBlock:^(id obj, NSDictionary *bindings) {
assert([obj isKindOfClass:[NSDictionary class]]); // array contains dictionaries
return [obj[@"day"] isEqualToString:day]; // assuming key is @"day"
}];
NSArray *matchingDictionaries = [self.allDictionaries filteredArrayUsingPredicate:filter]; // assuming data source is allDictionaries
return matchingDictionaries.count;
}
コード呼び出しの頻度-tableView:numberOfRowsInSection:
と完全なデータソースのサイズによっては、これによりかなり深刻なパフォーマンスの低下が発生する可能性があります。最初に提案したことを実行する方がよい場合があります。データを事前にフィルタリングし、テーブルビューで使用できるように適切な配列を最新の状態に保ちます。(ただし、時期尚早の最適化は、多くの場合、良いことよりも害を及ぼす可能性があることを忘れないでください!)