1

私の目標は、fetchedResultsControllerでフェッチされたすべての結果からデータを入力することにより、テーブルビューのセクションにデータを入力することです。これは非常に単純で、魅力のように機能します。

私の小さなアプリの2番目の部分は、同じテーブルの別のセクションに属性「price」を追加することです。それは大丈夫です。

これは私がそれを達成するために使用したものです:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

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

        // Return the number of rows in the section.
    if (section == 1) {
        return 1;

    } else return [self.fetchedResultsController.fetchedObjects count];  

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

{{

if (indexPath.section == 0) {
    static NSString *ci = @"CellTotal";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:ci];

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:0];
    float expense = 0;
    for (NSManagedObject *object in [sectionInfo objects]) {
        expense += [[object valueForKey:@"precio"] floatValue];
    }


    cell.textLabel.text = [NSString stringWithFormat:@"%f", expense];

    return cell;

} else {
    static NSString *ci = @"Cell";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:ci];
    [self configureCell:cell atIndexPath:indexPath];   
    return cell;
}

}

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{

Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:indexPath];
cell.detailTextLabel.text = g.nombre;

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMinimumFractionDigits:2];
[f setMaximumFractionDigits:2];

NSString *precio = [f stringFromNumber: g.precio];

cell.textLabel.text = precio;

}

テーブルビューのセクションの順序を変更したいときに問題が発生します。セクション0に合計の追加を表示し、セクション1にフェッチされた結果のリストを表示したい場合、アプリは次のエラーでクラッシュします。

キャッチされなかった例外'NSRangeException'が原因でアプリを終了しています。理由:' * -[__ NSArrayM objectAtIndex:]:インデックス1が境界を超えています[0 .. 0] '

私が間違っていることについて何か考えはありますか?どんな助けでも大歓迎です、ありがとう!

update これは、コードがアプリを壊す場所です。

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{

        Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:indexPath];

最初にフェッチされたオブジェクトで作業しているように見えますが、2番目では失敗します。私はこの質問に本当に苦労しています。私はデバッグ、フェッチコントローラが存在するかどうかの確認などに取り組んできましたが、すべてが問題ないようで、壊れています...私は初心者で、問題を修正する方法がわかりません:-(

4

1 に答える 1

2

2つのセクションがあるテーブルビューがあります。2番目のセクションには、FRC(セクションが1つしかない)が入力されます。したがって、テーブルビューのセクション1は、FRCのセクション0に対応します。

configureCell:atIndexPath:メソッドはテーブルビューのindexPath(section == 1)で呼び出さobjectAtIndexPathれますが、section == 0で呼び出す必要があります。したがって、次のようにセクション番号を調整する必要があります。

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *frcIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:(indexPath.section - 1)];
    Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:frcIndexPath];
}
于 2012-07-27T11:51:17.773 に答える