0

私はコアデータとNSFetched結果コントローラーが初めてです。これまでのところ、tableView を埋めることができました。しかし今、私はセクションに分けたいと思っています。私のコードは次のようになります。

- (void)getKeepers // attaches an NSFetchRequest to this UITableViewController
{

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Team"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"sortOrder" ascending:YES]];
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.genkDatabase.managedObjectContext
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];

}

状況をスケッチしましょう。サッカークラブのアプリを作っています。私のテーブルビューでは、すべてのポジション (ゴールキーパー、ディフェンダー、ウィンガー、アタッカー) に新しいセクションが必要です。私のコア データベースは次のようになります。

- TEAM
   -name
   -Position
   -img_url
   -birthDate
   -sortOrder

プレイヤーを並べ替えるために属性 sortOrder を追加しました。しかし、それをセクションに分割するのを手伝ってくれる人はいますか?

前もって感謝します !!

私のCELL_FOR_ROW_AT_INDEX で私がしていること私のcellForRowAtIndexでは、私は通常のことをしていません。6 つのイメージビューを含むカスタム tableviewCell を使用しています。ただし、行に 4 つの画像しか含まれていない可能性があります。ここで私がやろうとしていることを見ることができます。

#define IMAGES_PER_ROW  6

   NSInteger frcRow = indexPath.row * IMAGES_PER_ROW; // row in fetched results controller

    for (int col = 1; col <= IMAGES_PER_ROW; col++) {
        NSIndexPath *path = [NSIndexPath indexPathForRow:frcRow inSection:0];
        Team *team = [self.fetchedResultsController objectAtIndexPath:path];
        NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:team.image]];
        UIImage *image;
        if (imgData == nil) {
            // default image
            image = [UIImage imageWithContentsOfFile:@"keeperNil.jpg"];
        } else {
            image = [UIImage imageWithData:imgData];
        }
        [cell setImage:image forPosition:col];
        frcRow ++;
    }
4

1 に答える 1

0

値をセクションに使用sectionNameKeyPathするフィールドとして使用します。

次に、これら3つの機能が必要です...

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResultsController.sections[section];

    return [sectionInfo numberOfObjects];
}

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

    return [sectionInfo name];
}

これで十分です。

cellForRowAtIndexPath 関数は次のようになります...

...
UITableViewCell* cell = [UITableViewCell dequeueCellWithReuseIdnetifier:@"blah"];

Team *team = [self.fetchedResultsController objectAtIndexPath:indexPath];

cell.textLabel.text = team.name;
cell.detailTextLabel.text = team.position.

またはそのようなもの。

取得しているエラーは、十分なエントリが含まれていない配列にアクセスしようとしていることを意味します。

それが機能しない場合は、cellForRowAtIndexPath 関数を投稿してください。

于 2012-10-10T22:49:35.330 に答える