0

テーブルビューの内容を入れ替えたい。データソースには、表示するかどうかを示すフラグが付いた要素があります。

最終的には、フラグに応じて、表示されるものを交換できるようにしたいと思います。しかし、今のところ、私は次の答えに落ち着きます。

テーブルにデータソースのサブセットのみを表示するにはどうすればよいですか?

私は[tableViewreload]を要求していません。これは、ほとんどの検索で得られたもののようです。基準(この場合はフラグ)に基づいて、一度に一部のデータソースアイテムのみを表示したいと思います。

わかりやすくするための例として、機能のサンプルを次に示します。


配列には50個のFriend要素があります。これは、テーブルのデータソースです。アプリをロードすると、50人の友達全員が表示されます。

それらの友達のうち20人は、友達クラス内で「素晴らしい」とマークされています。Awesomeボタンをタップすると、それらの20個が表に表示されます。

そのうちの10個は、Friendクラス内で「Lame」としてマークされています。Lameボタンをタップすると、それらの10個が表に表示されます。


それを達成するためにどのような方法を検討する必要がありますか?TableViewの議論は膨大であり、これまでのところ、満足のいく結果が得られずにバグやエラーを調査してきました。

4

2 に答える 2

3

NSPredicatefetchResultsによって返される値をフィルタリングするように設定できます。

- (NSFetchedResultsController *)fetchedResults {
...

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"flag == %@", @"Awesome"];
    [fetchRequest setPredicate:predicate];  

...

これにより、の基準を満たすレコードのみが返されますNSPredicate

于 2013-02-27T01:30:28.860 に答える
3

2つのデータ構造を保持します。1つ目は、データのマスターセットです。2つ目は、表示するデータのみを含みます。テーブルを2番目のデータセットにポイントします。

基本的に、別のサブセットでテーブルをリロードする場合は、新しい配列を作成し、マスターデータセットを反復処理して、必要なオブジェクトだけを新しい配列に追加します。

2番目の配列にはマスター配列からの元のオブジェクトへの参照があるだけなので、これに対する余分なオーバーヘッドはほとんどありません。

更新:Rob Napierによるコメントを拡張するために、私が言及したマスターデータ構造は「モデル」であり、2番目のデータ構造はテーブルのデータソースをサポートするデータです。

于 2013-02-27T01:31:12.897 に答える