1

私はとても近くにいます...しかし、何かが欠けているに違いありません。

私のローカルDBには、州、州名の最初の文字(A、C、D、)などを含むさまざまな詳細を含むゴルフコースのリストがあります...NSFetchedResultsControllerはコースのリストを取得しています(または)私が記録したコースがあるすべての州を示すのにうまく機能しています。

いずれにせよ...セクション ヘッドは機能しているように見えます...しかし、私の状態は現在、各状態にあるコースの数だけ複製されています。

以下のコードとスクリーンショット。何が足りないの?!? それはとても明白なものでなければなりません。

ここに画像の説明を入力

-(NSFetchedResultsController *)fetchedResultsController {
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Courses"
                            inManagedObjectContext:_managedObjectContext];

    request.entity = entity;

    request.sortDescriptors = [NSArray arrayWithObject:
                               [NSSortDescriptor
                                sortDescriptorWithKey:@"locState"
                                ascending:YES
                            selector:@selector(caseInsensitiveCompare:)]];


    request.returnsDistinctResults = YES;
    request.fetchBatchSize = 20;

    NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
                                       initWithFetchRequest:request
                            managedObjectContext:self.managedObjectContext
                                sectionNameKeyPath:@"locStateSectionHead"
                                       cacheName:nil];
    frc.delegate = self;

    NSError *error = nil;
    if (![frc performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    self.fetchedResultsController = frc;
    return _fetchedResultsController;
}

そして残りの tableView セットアップ:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return [[self.fetchedResultsController sections] count];
}

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {

    if ([[_fetchedResultsController sections] count] > 0) {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo numberOfObjects];
    } else {
        return 0;
    }
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo name];
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [self.fetchedResultsController sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"stateCell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    // Configure the cell...
    Courses *course_info = [_fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = course_info.locState;

    return cell;
}
4

1 に答える 1

1

テーブルビューに州を表示したい場合NSFetchedResultsController、コースではなく州を取得する必要があります。コースから並べ替えており、状態に複数のコースがあるため、重複が発生しています。

NSFetchedResultsControllerState エンティティをロードするように構成すると、テーブル ビューが適切に表示されます。そこからユーザーが状態を選択すると、状態からコースへの関係を使用して次のシーンを表示できます。

あなたは単にそれを逆に持っています:)

于 2016-05-13T16:52:56.813 に答える