2

name、pic、dayなどのプロパティを含む配列内に辞書があります(dayはからの文字列ですpicker view)。

毎週のテーブルビューを表示し、日ごとにアイテムを整理したいと思います。

私が計画しているのは、毎日新しい配列を作成し、すべてのデータをそれらの配列にフィルターしてから、セクションにデータを入力することです。それを行うためのより賢い方法はありますか?

numberOfRowsInSection最初にデータをフィルタリングしないと、別の方法で取得することはできません。

4

1 に答える 1

1

これを行うもう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:と完全なデータソースのサイズによっては、これによりかなり深刻なパフォーマンスの低下が発生する可能性があります。最初に提案したことを実行する方がよい場合があります。データを事前にフィルタリングし、テーブルビューで使用できるように適切な配列を最新の状態に保ちます。(ただし、時期尚早の最適化は、多くの場合、良いことよりも害を及ぼす可能性があることを忘れないでください!)

于 2012-12-19T09:09:35.803 に答える