私のアプリはCoreDataを使用しています。UISegmentedControlとテーブルビューがあります。UISegmentedControlは、さまざまな基準に基づいてテーブルビューを更新するために使用されます。
UISegmentedControlの最初のオプションは、すべてのデータを単一のテーブルビューセクションに表示します。だから私は-(NSFetchedResultsController *)fetchedResultsControllerで次のコードを使用します
frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[self managedObjectContext]
sectionNameKeyPath:nil
cacheName:@"Root"];
2番目のオプションは、複数のテーブルビューセクションにデータを表示します。したがって、NSSortDescriptorが必要で、sectionNameKeyPathを設定します。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"city"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *frc = nil;
frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[self managedObjectContext]
sectionNameKeyPath:@"city"
cacheName:@"Root"];
sectionNameKeyPathは異なり、それぞれが異なるNSSortDescriptorを必要とするため、2つの異なるNSFetchedResultsControllerが必要であると想定します。
tableviewをリロードするために使用するコード:
- (void) touchDownAtSegmentIndex:(NSUInteger)segmentIndex{
NSPredicate *predicate;
NSError *error;
[NSFetchedResultsController deleteCacheWithName:@"Root"];
if(segmentIndex == 0)
{
}
else if(segmentIndex == 1)
{
}
else
{
return;
}
[[[self fetchedResultsController] fetchRequest] setPredicate:predicate];
[[self fetchedResultsController] performFetch:&error];
[[self tableView] reloadData];
}
誰でも、2つのNSFetchedResultsControllerを使用するコードのサンプルを提供できます。ありがとうございました。
解決:
@iTukkerのアイデアに加えて、戻る前にさらにチェックを追加しましfetchedResultsController
た。このチェックを行わないと、このメソッドはステートメントfetchedResultsController
を実行する代わりに戻ります。switch .. case ..
- (NSFetchedResultsController*)fetchedResultsController {
.....
if ((fetchedResultsController!= nil) && [self.segmentChanged isEqualToString:@"false"])
return fetchedResultsController;
.....
if (frc == nil) {
switch (segmentendControl.selectedSegmentIndex) {
case 0: {
frc = ... //first frc
[frc retain];
break;
}
case 1: {
frc = ... //second frc
[frc retain];
break;
}
}
}
....
}