0

(コアデータを使用して)セクション化されたテーブルビューを実行する場合は、セクションヘッダーに対応するテキストを何らかの方法で提供する必要があります。これを行う1つの方法は、セクションインデックスでインデックスを付けることができる文字列を含む配列を作成することです。

多くのシナリオで、このようなアレイの構築はかなり単純であるか、場合によっては簡単であることがわかりました。

ただし、セクションに分割する必要があるのがエンティティインスタンスオブジェクトのセットであり、ヘッダーが複数の属性の値を連結することで構成されている場合、文字列の「セクション」配列を構築する[効果的な]方法は見つかりませんでした。あなたのオブジェクトの。

通常、同じテーブルビューのデータソースである別の配列にエンティティオブジェクトがあります。そして、その配列は、セクションが必要な特定の基準によってすでにソート/グループ化されています。

セクションがインスタンス内の属性の1つだけの値と同じくらい単純な場合、オブジェクトの配列をフィルタリングし、1つの属性のすべての個別の値を取得して、セクション配列でそれらを使用するだけで完了です。

各インスタンスオブジェクトの複数の属性をセクションのテキストとして使用する必要がある場合、通常、セクション配列をどのように作成しますか。セクションヘッダーの一部になりたい値を連結しますか?それが私が行っていることであり、その連結された文字列を保持する配列をフィルタリングしますが、それが正しいかどうか、またはセクションを作成する別の「より良い」方法があるかどうかを知りたいです。

たとえば、現在、インスタンスに3つの属性を連結しています。日付、タイトル、名前です(11/02/2012 GROCERIES Frute)。私のインスタンスオブジェクトは日付、タイトル、名前で並べ替えられているため、一部のオブジェクトは同じセクションに属し、他のオブジェクトは別のセクションに属します。セクション配列には、別個の連結文字列のみが含まれることが想定されているため、重複を排除するためにフィルター処理すると、セクション配列になります。

それでも、もっと良い方法があるはずだと思います。

4

1 に答える 1

1

並べ替えができない、または複数の値を連結した値または結果でセクション配列を作成する場合、最初の並べ替え記述子としてに渡すカスタムの並べ替え値を常に作成しますNSFetchedResultsController

CoreDataによって生成された正しい「GROUPBY」-SQL構文を取得するには、SectionNameKeyPathと最初のsortdescriptorの両方に同じ属性が必要です。

そこから、の– controller:sectionIndexTitleForSectionName:メソッドをオーバーライドNSFetchedResultsControllerDelegateし、指定されたセクションのセクションタイトルを連結または返します。

- (NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{  
  id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
  NSArray *articles = [sectionInfo objects];
  if ([articles count] > 0)
  {
    Article *article = [articles objectAtIndex:0];
    return article.section;
  }
  return [sectionInfo name];
}
于 2012-11-05T18:35:35.820 に答える