1

私がやりたいことは、x 行ごとに NSFetchedResultsController セクションを作成することです。

私は一時的なプロパティを作成しようとしました。これは、次のようにインデックスに基づいてセクションを提供します。

- (NSNumber*)section
{
    [self willAccessValueForKey:@"section"];
    NSManagedObjectContext* context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Animal"];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]]];
    NSArray* array = [context executeFetchRequest:fetchRequest error:NULL];
    int order = [array indexOfObject:self];
    NSNumber *tmpValue = [NSNumber numberWithInt:order / 3];
    [self didAccessValueForKey:@"section"];
    return tmpValue;
}

すべてのオブジェクトでこの関数をトリガーすることにより、viewcontroller がセクションを更新するようにしました。

-(void)refreshSection
{
    NSManagedObjectContext* context = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Animal"];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]]];
    NSArray* array = [context executeFetchRequest:fetchRequest error:NULL];
    int order = [array indexOfObject:self];
   [self setSection:[NSNumber numberWithInt:order / 3]];
}

このソリューションは機能しますが、オブジェクトの大きなセットでは効率的ではありません。

基本的に、私が達成したいのはこれです:

セクション 0:
a
b
d
セクション 1:
e

c を追加した場合:

セクション 0:
a
b
c
セクション 1:
d
e

これを行うための他のよりエレガントな方法はありますか?

ありがとう..

4

1 に答える 1

0

一時的なプロパティ内でフェッチを行うと、明らかにパフォーマンスが低下します。

この一時的なプロパティについて心配する必要はありません。代わりに、メソッド numberOfSection で、オブジェクトの数を 3 で割った値を切り上げて返すだけです。

セクション内の行数については、3 を返すだけですが、最後のセクションはオブジェクト数を 3 で割った余りになることに注意してください。

オブジェクトを追加するときは、テーブルを更新することを忘れないでください。これらのメソッドが再度呼び出されます。

于 2012-08-26T11:41:48.397 に答える