0

NSFetchedResultsController を使用して、Core Data を含むデータベースからフェッチします。そして、NSString の prop1 と prop2 の 2 つのプロパティを持つエンティティがあります。
プロパティの 1 つだけでなく、両方でセクションを並べ替えるにはどうすればよいですか?
今は次のとおりです。

Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)

私は欲しい:

Title1ForProp1/Title1ForProp2 (prop1==1 prop2==1)
Title1ForProp1/Title2ForProp2 (prop1==1 prop2==2)
Title2ForProp1/Title1ForProp2 (prop1==2 prop2==1)
4

2 に答える 2

3

NSFC のフェッチ要求を作成するときは、ソート記述子を作成し、要求に配列を与えます。

配列には、好きなだけソート記述子を入れることができます。

ソートするフィールドごとにソート記述子を作成するだけです。

ただし、それらを配列に入れる順序は覚えています。

OK、コード的に...

NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"prop1" ascending:YES];
NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"prop2" ascending:YES];

[fetchRequest setSortDescriptors:@[sd1, sd2]];

必要な操作はこれだけです。

NSFC は、sectionNameKeyPath を指定した場合にのみセクションに分割します。セクションが不要な場合は、sectionNameKeyPath を nil にします。

于 2013-02-01T12:16:14.267 に答える
1

Fogmeister のソート記述子配列は適切ですが (prop1 でソートしてから prop2 でソート)、sectionNameKeyPathセクションに prop1 を指定すると、prop1 だけで分割されます。各セクション内で、アイテムは prop1 と prop2 の両方でソートされます。

これが望ましくなく、結果をさらに prop1 と prop2 の両方でセクションにグループ化する必要がある場合は、prop1 と prop2 の両方を連結する一時的なプロパティを作成し、その一時的なプロパティを として提供することをお勧めしますsectionNameKeyPath。これは、セクションのタイトルを提供するだけでなく、結果をセクションにグループ化する方法も決定します。

セクション名の一時的なプロパティを作成する方法については、この質問をご覧ください: 文字列の最初の文字で作成されたセクションを持つ NSFetchedResultsController

于 2013-02-04T08:22:16.610 に答える